Skip to content

Commit 588c0db

Browse files
committed
Make the property name detection logic more robust
Instead of relying on the SYCL compiler version macro, we use C++ type_traits to detect which of the two names for the property actually refers to a fully defined type. Signed-off-by: Lukas Sommer <[email protected]>
1 parent 92a7fe7 commit 588c0db

File tree

1 file changed

+26
-10
lines changed

1 file changed

+26
-10
lines changed

libsyclinterface/source/dpctl_sycl_kernel_bundle_interface.cpp

+26-10
Original file line numberDiff line numberDiff line change
@@ -846,16 +846,32 @@ namespace syclex = sycl::ext::oneapi::experimental;
846846
#endif
847847

848848
#if (SUPPORTS_SYCL_COMPILATION > 0)
849-
#ifndef __SYCL_COMPILER_VERSION
850-
#error SYCL compiler version not defined
851-
#else
852-
// The property was renamed to `registered_names` after 2025.1
853-
#if __SYCL_COMPILER_VERSION > 20250317u
854-
using registered_names_property_t = syclex::registered_names;
855-
#else
856-
using registered_names_property_t = syclex::registered_kernel_names;
857-
#endif
858-
#endif
849+
// The property for registering names was renamed between DPC++ versions 2025.1
850+
// and 2025.2. The original name was `registered_kernel_names`, the new name is
851+
// `registered_names`. To select the correct name without being overly reliant
852+
// on the SYCL compiler version definition, we forward declare both names and
853+
// then select the new name if it is defined (i.e., not only declared).
854+
namespace sycl::ext::oneapi::experimental
855+
{
856+
struct registered_names;
857+
struct registered_kernel_names;
858+
} // namespace sycl::ext::oneapi::experimental
859+
860+
template <typename NewT, typename FallbackT, typename = void>
861+
struct new_type_if_defined
862+
{
863+
using type = FallbackT;
864+
};
865+
866+
template <typename NewT, typename FallbackT>
867+
struct new_type_if_defined<NewT, FallbackT, std::void_t<decltype(sizeof(NewT))>>
868+
{
869+
using type = NewT;
870+
};
871+
872+
using registered_names_property_t =
873+
new_type_if_defined<syclex::registered_names,
874+
syclex::registered_kernel_names>::type;
859875
#endif
860876

861877
__dpctl_give DPCTLSyclKernelBundleRef DPCTLKernelBundle_CreateFromSYCLSource(

0 commit comments

Comments
 (0)