host_defines.h redefines __noinline__ as __attribute__((noinline)).
When clang compiles CUDA code against libstdc++ >=12, which uses
__attribute__((__noinline__)), the macro causes the invalid expansion
__attribute__((__attribute__((noinline)))). Clang natively understands
__noinline__ as an attribute, so the macro is unnecessary — skip it
when clang is the compiler.
The existing glibc 2.42 compatibility patch fixes function signatures
in math_functions.h but misses math_functions.hpp, which has the same
rsqrt/sinpi/cospi functions wrapped in __func__() macros. Without
throw() annotations on these, C++ compilation fails when glibc 2.42
declares the same functions with throw().