[CUDA][HIP] support __noinline__ as keyword
authorYaxun (Sam) Liu <yaxun.liu@amd.com>
Tue, 3 May 2022 18:13:56 +0000 (14:13 -0400)
committerYaxun (Sam) Liu <yaxun.liu@amd.com>
Tue, 10 May 2022 18:32:27 +0000 (14:32 -0400)
commitafc9d674fe5a14b95c50a38d8605a159c2460427
treea003f9a93cf1ccbdc1a273e1c7c8778395872e92
parent0353c2c996c5863463c356de97c9852f9330ed11
[CUDA][HIP] support __noinline__ as keyword

CUDA/HIP programs use __noinline__ like a keyword e.g.
__noinline__ void foo() {} since __noinline__ is defined
as a macro __attribute__((noinline)) in CUDA/HIP runtime
header files.

However, gcc and clang supports __attribute__((__noinline__))
the same as __attribute__((noinline)). Some C++ libraries
use __attribute__((__noinline__)) in their header files.
When CUDA/HIP programs include such header files,
clang will emit error about invalid attributes.

This patch fixes this issue by supporting __noinline__ as
a keyword, so that CUDA/HIP runtime could remove
the macro definition.

Reviewed by: Aaron Ballman, Artem Belevich

Differential Revision: https://reviews.llvm.org/D124866
clang/docs/ReleaseNotes.rst
clang/include/clang/Basic/Attr.td
clang/include/clang/Basic/AttrDocs.td
clang/include/clang/Basic/Features.def
clang/include/clang/Basic/TokenKinds.def
clang/include/clang/Parse/Parser.h
clang/lib/Basic/IdentifierTable.cpp
clang/lib/Parse/ParseDecl.cpp
clang/test/CodeGenCUDA/noinline.cu [new file with mode: 0644]
clang/test/Lexer/has_feature.cu [new file with mode: 0644]
clang/test/SemaCUDA/noinline.cu [new file with mode: 0644]