https://github.com/Artem-B created https://github.com/llvm/llvm-project/pull/74123
https://github.com/llvm/llvm-project/pull/73838 >From 71e24fc704c82c11162313613691d09b9a653bd5 Mon Sep 17 00:00:00 2001 From: Artem Belevich <t...@google.com> Date: Fri, 1 Dec 2023 10:37:08 -0800 Subject: [PATCH] [CUDA] work around more __noinline__ conflicts with libc++ https://github.com/llvm/llvm-project/pull/73838 --- clang/lib/Headers/CMakeLists.txt | 2 ++ clang/lib/Headers/cuda_wrappers/__config | 10 ++++++++++ clang/lib/Headers/cuda_wrappers/string | 10 ++++++++++ 3 files changed, 22 insertions(+) create mode 100644 clang/lib/Headers/cuda_wrappers/__config create mode 100644 clang/lib/Headers/cuda_wrappers/string diff --git a/clang/lib/Headers/CMakeLists.txt b/clang/lib/Headers/CMakeLists.txt index fdd54c05eedf825..f562c354327f2fb 100644 --- a/clang/lib/Headers/CMakeLists.txt +++ b/clang/lib/Headers/CMakeLists.txt @@ -283,10 +283,12 @@ set(files ) set(cuda_wrapper_files + cuda_wrappers/__config cuda_wrappers/algorithm cuda_wrappers/cmath cuda_wrappers/complex cuda_wrappers/new + cuda_wrappers/string ) set(cuda_wrapper_bits_files diff --git a/clang/lib/Headers/cuda_wrappers/__config b/clang/lib/Headers/cuda_wrappers/__config new file mode 100644 index 000000000000000..04038b0fa3437ee --- /dev/null +++ b/clang/lib/Headers/cuda_wrappers/__config @@ -0,0 +1,10 @@ +// CUDA headers define __noinline__ which interferes with libc++'s use of +// `__attribute((__noinline__))`. In order to avoid compilation error, +// temporarily unset __noinline__ when we include affected libstdc++ header. + +#pragma push_macro("__noinline__") +#undef __noinline__ +#define __noinline__ __noinline__ +#include_next "__config" + +#pragma pop_macro("__noinline__") diff --git a/clang/lib/Headers/cuda_wrappers/string b/clang/lib/Headers/cuda_wrappers/string new file mode 100644 index 000000000000000..d612710393623b5 --- /dev/null +++ b/clang/lib/Headers/cuda_wrappers/string @@ -0,0 +1,10 @@ +// CUDA headers define __noinline__ which interferes with libc++'s use of +// `__attribute((__noinline__))`. In order to avoid compilation error, +// temporarily unset __noinline__ when we include affected libstdc++ header. + +#pragma push_macro("__noinline__") +#undef __noinline__ +#define __noinline__ __noinline__ +#include_next "string" + +#pragma pop_macro("__noinline__") _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits