diff options
author | Aaron Ballman <aaron@aaronballman.com> | 2016-03-07 22:44:55 +0000 |
---|---|---|
committer | Aaron Ballman <aaron@aaronballman.com> | 2016-03-07 22:44:55 +0000 |
commit | e7964789dabaa5b9fb26c50f54deafb7fb8db4d6 (patch) | |
tree | e9284db077152c2c9222edb213e39ebbb193ef7d /clang/lib/Sema/SemaDeclAttr.cpp | |
parent | 146c14ac33136ebff2714f4596f6d7db85d6b5e8 (diff) | |
download | bcm5719-llvm-e7964789dabaa5b9fb26c50f54deafb7fb8db4d6.tar.gz bcm5719-llvm-e7964789dabaa5b9fb26c50f54deafb7fb8db4d6.zip |
Implement support for [[nodiscard]] in C++1z that is based off existing support for warn_unused_result, and treat it as an extension pre-C++1z. This also means extending the existing warn_unused_result attribute so that it can be placed on an enum as well as a class.
llvm-svn: 262872
Diffstat (limited to 'clang/lib/Sema/SemaDeclAttr.cpp')
-rw-r--r-- | clang/lib/Sema/SemaDeclAttr.cpp | 6 |
1 files changed, 6 insertions, 0 deletions
diff --git a/clang/lib/Sema/SemaDeclAttr.cpp b/clang/lib/Sema/SemaDeclAttr.cpp index bb02e0b59c4..ce78ab00926 100644 --- a/clang/lib/Sema/SemaDeclAttr.cpp +++ b/clang/lib/Sema/SemaDeclAttr.cpp @@ -2463,6 +2463,12 @@ static void handleWarnUnusedResult(Sema &S, Decl *D, const AttributeList &Attr) return; } + // If this is spelled as the standard C++1z attribute, but not in C++1z, warn + // about using it as an extension. + if (!S.getLangOpts().CPlusPlus1z && Attr.isCXX11Attribute() && + !Attr.getScopeName()) + S.Diag(Attr.getLoc(), diag::ext_nodiscard_attr_is_a_cxx1z_extension); + D->addAttr(::new (S.Context) WarnUnusedResultAttr(Attr.getRange(), S.Context, Attr.getAttributeSpellingListIndex())); |