diff --git a/include/cuda/std/barrier b/include/cuda/std/barrier index b35e927e34..a2b0616d4c 100644 --- a/include/cuda/std/barrier +++ b/include/cuda/std/barrier @@ -139,7 +139,7 @@ public: _LIBCUDACXX_INLINE_VISIBILITY barrier(std::ptrdiff_t __expected, std::__empty_completion __completion = std::__empty_completion()) { - static_assert(offsetof(barrier, __barrier) == 0, "fatal error: bad barrier layout"); + static_assert(_LIBCUDACXX_OFFSET_IS_ZERO(barrier, __barrier), "fatal error: bad barrier layout"); init(this, __expected, __completion); } diff --git a/libcxx/include/__config b/libcxx/include/__config index 20ed8c9ce9..8b69ccfdea 100644 --- a/libcxx/include/__config +++ b/libcxx/include/__config @@ -414,6 +414,12 @@ extern "C++" { #define _LIBCUDACXX_PREFERRED_ALIGNOF(_Tp) __alignof(_Tp) +#if defined(_LIBCUDACXX_COMPILER_NVRTC) +#define _LIBCUDACXX_OFFSET_IS_ZERO(type, member) !(&(((type *)0)->member)) +#else +#define _LIBCUDACXX_OFFSET_IS_ZERO(type, member) !offsetof(type, member) +#endif + #if defined(_LIBCUDACXX_COMPILER_CLANG) // _LIBCUDACXX_ALTERNATE_STRING_LAYOUT is an old name for