@@ -1199,6 +1199,44 @@ this extension.
11991199
12001200== Non-normative implementation notes for {dpcpp}
12011201
1202+ === C/{cpp} header files and limitations when the language is sycl
1203+
1204+ By default, the SYCL runtime compiler uses a self-contained set of C and {cpp}
1205+ header files when compiling kernels in the `sycl` language. This means that SYCL
1206+ applications using this feature can be run even on a system that does not have
1207+ these headers installed. However, the self contained header files may not be the
1208+ same as the C and {cpp} header files that were used to build the host part of
1209+ the SYCL application. As a result, there are additional limitations around data
1210+ that is shared between the host part of the application and the kernel. These
1211+ limitations apply to arguments that are passed to the kernel and also to data
1212+ shared through USM or through accessors. Additionally, other header files might
1213+ be installed in the same location as system C headers (e.g., `/usr/include/`).
1214+ Those will not be available as well.
1215+
1216+ Types that are defined by the compiler (e.g. fundamental types like `int` and
1217+ `float`) are guaranteed to have the same representation and alignment
1218+ requirements in both the host compiler and in the compiler used to compile the
1219+ kernel. Therefore data using these types can be safely shared. However, types
1220+ defined by the C or {cpp} library (e.g. types in the `std` namespace) are not
1221+ guaranteed to be the same, so data defined using these types cannot be safely
1222+ shared. There are a few specific exceptions to this limitation. The following C
1223+ / {cpp} types are guaranteed to have the same representation and alignment
1224+ requirements, so data defined as these types can be safely shared:
1225+
1226+ * The following fixed-width integer types: `int8_t`, `int16_t`, `int32_t`,
1227+ `int64_t`, `uint8_t`, `uint16_t`, `uint32_t`, `uint64_t`.
1228+ * The types `size_t` and `ptrdiff_t`.
1229+
1230+ Array and class types defined by your application are safe to share so long as
1231+ the element types are safe. Pointer types are safe to share so long as the
1232+ pointed-at type is safe. Enumeration types defined by your application are also
1233+ safe.
1234+
1235+ It is also possible to use the system C and C++ headers instead of the
1236+ self-contained versions. See the description of the
1237+ `--sycl-rtc-use-system-includes` option for more details.
1238+
1239+
12021240=== Supported `build_options` when the language is `sycl`
12031241
12041242The SYCL runtime compiler supports the following {dpcpp} options to be passed in
@@ -1359,44 +1397,6 @@ default.
13591397
13601398=== Known issues and limitations when the language is `sycl`
13611399
1362- ==== C/{cpp} header files
1363-
1364- By default, the SYCL runtime compiler uses a self-contained set of C and {cpp}
1365- header files when compiling kernels in the `sycl` language (unless target has
1366- other dependencies in system includes). This means that SYCL applications using
1367- this feature can be run even on a system that does not have these headers
1368- installed. However, the self contained header files may not be the same as the C
1369- and {cpp} header files that were used to build the host part of the SYCL
1370- application. As a result, there are additional limitations around data that is
1371- shared between the host part of the application and the kernel. These
1372- limitations apply to arguments that are passed to the kernel and also to data
1373- shared through USM or through accessors. Additionally, other header files might
1374- be installed in the same location as system C headers (e.g., `/usr/include/`).
1375- Those will not be available as well.
1376-
1377- Types that are defined by the compiler (e.g. fundamental types like `int` and
1378- `float`) are guaranteed to have the same representation and alignment
1379- requirements in both the host compiler and in the compiler used to compile the
1380- kernel. Therefore data using these types can be safely shared. However, types
1381- defined by the C or {cpp} library (e.g. types in the `std` namespace) are not
1382- guaranteed to be the same, so data defined using these types cannot be safely
1383- shared. There are a few specific exceptions to this limitation. The following C
1384- / {cpp} types are guaranteed to have the same representation and alignment
1385- requirements, so data defined as these types can be safely shared:
1386-
1387- * The following fixed-width integer types: `int8_t`, `int16_t`, `int32_t`,
1388- `int64_t`, `uint8_t`, `uint16_t`, `uint32_t`, `uint64_t`.
1389- * The types `size_t` and `ptrdiff_t`.
1390-
1391- Array and class types defined by your application are safe to share so long as
1392- the element types are safe. Pointer types are safe to share so long as the
1393- pointed-at type is safe. Enumeration types defined by your application are also
1394- safe.
1395-
1396- It is also possible to use the system C and C++ headers instead of the
1397- self-contained versions. See the description of the
1398- `--sycl-rtc-use-system-includes` option for more details.
1399-
14001400==== Changing the compiler action or output
14011401
14021402As the {dpcpp} frontend is integrated tightly in the runtime compilation
0 commit comments