diff options
| author | Saleem Abdulrasool <compnerd@compnerd.org> | 2017-04-07 15:13:47 +0000 |
|---|---|---|
| committer | Saleem Abdulrasool <compnerd@compnerd.org> | 2017-04-07 15:13:47 +0000 |
| commit | b51bcaf2f027f0774749e31d5fff2e618b1ee0f2 (patch) | |
| tree | 85951c0eb5d20c26cd0334bf8ad6777cb95d42ce /clang/lib/Sema | |
| parent | 60d0e982f038ecb0b93e5896fd84988950977102 (diff) | |
| download | bcm5719-llvm-b51bcaf2f027f0774749e31d5fff2e618b1ee0f2.tar.gz bcm5719-llvm-b51bcaf2f027f0774749e31d5fff2e618b1ee0f2.zip | |
Sema: prevent __declspec(naked) use on x64
MSDN (https://msdn.microsoft.com/en-us/library/h5w10wxs.aspx) indicates
that `__declspec(naked)` is only permitted on x86 and ARM targets.
Testing with cl does confirm this behaviour. Provide a warning for use
of `__declspec(naked)` on x64.
llvm-svn: 299774
Diffstat (limited to 'clang/lib/Sema')
| -rw-r--r-- | clang/lib/Sema/SemaDeclAttr.cpp | 11 |
1 files changed, 11 insertions, 0 deletions
diff --git a/clang/lib/Sema/SemaDeclAttr.cpp b/clang/lib/Sema/SemaDeclAttr.cpp index c2bd9f939b1..a1ba9de368d 100644 --- a/clang/lib/Sema/SemaDeclAttr.cpp +++ b/clang/lib/Sema/SemaDeclAttr.cpp @@ -1923,6 +1923,17 @@ static void handleNakedAttr(Sema &S, Decl *D, const AttributeList &Attr) { Attr.getName())) return; + if (Attr.isDeclspecAttribute()) { + const auto &Triple = S.getASTContext().getTargetInfo().getTriple(); + const auto &Arch = Triple.getArch(); + if (Arch != llvm::Triple::x86 && + (Arch != llvm::Triple::arm && Arch != llvm::Triple::thumb)) { + S.Diag(Attr.getLoc(), diag::err_attribute_not_supported_on_arch) + << Attr.getName() << Triple.getArchName(); + return; + } + } + D->addAttr(::new (S.Context) NakedAttr(Attr.getRange(), S.Context, Attr.getAttributeSpellingListIndex())); } |

