diff options
author | Paul Robinson <paul_robinson@playstation.sony.com> | 2015-01-13 18:34:56 +0000 |
---|---|---|
committer | Paul Robinson <paul_robinson@playstation.sony.com> | 2015-01-13 18:34:56 +0000 |
commit | 080b1f3055b1f60588deab6839c1e87647b3c284 (patch) | |
tree | 775f011f0755f0d456ade37ceb43a27b80a6300e /clang/lib/Sema/SemaDecl.cpp | |
parent | dc0a11c21fd799c9c22d8f9d274171a31ba24140 (diff) | |
download | bcm5719-llvm-080b1f3055b1f60588deab6839c1e87647b3c284.tar.gz bcm5719-llvm-080b1f3055b1f60588deab6839c1e87647b3c284.zip |
When attribute 'optnone' appears on the same declaration with a
conflicting attribute, warn about the conflict and pick a "winning"
attribute to preserve, instead of emitting an error. This matches the
behavior when the conflicting attributes are on different declarations.
Along the way I discovered that conflicts involving __forceinline were
reported as 'always_inline' (alternate spelling, same attribute) so
fixed that up to report the attribute as spelled in the source.
llvm-svn: 225813
Diffstat (limited to 'clang/lib/Sema/SemaDecl.cpp')
-rw-r--r-- | clang/lib/Sema/SemaDecl.cpp | 4 |
1 files changed, 3 insertions, 1 deletions
diff --git a/clang/lib/Sema/SemaDecl.cpp b/clang/lib/Sema/SemaDecl.cpp index baa6822da71..7d1e28ee595 100644 --- a/clang/lib/Sema/SemaDecl.cpp +++ b/clang/lib/Sema/SemaDecl.cpp @@ -2155,7 +2155,9 @@ static bool mergeDeclAttribute(Sema &S, NamedDecl *D, AttrSpellingListIndex, IA->getSemanticSpelling()); else if (const auto *AA = dyn_cast<AlwaysInlineAttr>(Attr)) - NewAttr = S.mergeAlwaysInlineAttr(D, AA->getRange(), AttrSpellingListIndex); + NewAttr = S.mergeAlwaysInlineAttr(D, AA->getRange(), + &S.Context.Idents.get(AA->getSpelling()), + AttrSpellingListIndex); else if (const auto *MA = dyn_cast<MinSizeAttr>(Attr)) NewAttr = S.mergeMinSizeAttr(D, MA->getRange(), AttrSpellingListIndex); else if (const auto *OA = dyn_cast<OptimizeNoneAttr>(Attr)) |