Unsetting __noinline__ before inclusion of libc++ __config breaks libc++ headers. Additionally, `[[__gnu__::__noinline__]]` is used in libstdc++-16 `#include `, causing build failures in libstdc++ as well. Bug: https://github.com/ROCm/rocm-systems/issues/1874 --- a/hipamd/include/hip/amd_detail/host_defines.h +++ b/hipamd/include/hip/amd_detail/host_defines.h @@ -250,6 +250,17 @@ typedef __hip_internal::int64_t __hip_int64_t; #define __global__ +// __config in libc++ fails on `__has_attribute(__noinline__)` if __noinline__ is emptied +#if defined(__cplusplus) && defined(__has_include) +# if __has_include(<__config>) +# include <__config> +# else +// format in libstdc++-16 fails on `[[__gnu__::__noinline__]]` if __noinline__ is emptied +// https://github.com/ROCm/rocm-systems/issues/1874#issuecomment-5550937256 +# include +# endif +#endif + #define __noinline__ #define __forceinline__ inline