diff options
author | Richard Smith <richard-llvm@metafoo.co.uk> | 2019-10-11 17:59:09 +0000 |
---|---|---|
committer | Richard Smith <richard-llvm@metafoo.co.uk> | 2019-10-11 17:59:09 +0000 |
commit | 1e3a8d12a1a37fb2842af6c0fad8e5ba2804ea60 (patch) | |
tree | 4aad2a2f6e8cfac89cbd38ef3c8ec8231a88790c | |
parent | af6c15f67916c30acda3aed908382230882ee03c (diff) | |
download | bcm5719-llvm-1e3a8d12a1a37fb2842af6c0fad8e5ba2804ea60.tar.gz bcm5719-llvm-1e3a8d12a1a37fb2842af6c0fad8e5ba2804ea60.zip |
Suppress false-positive -Wdeprecated-volatile warning from __is_*_assignable(volatile T&, U).
llvm-svn: 374580
-rw-r--r-- | clang/lib/Sema/SemaExprCXX.cpp | 8 | ||||
-rw-r--r-- | clang/test/SemaCXX/deprecated.cpp | 2 |
2 files changed, 9 insertions, 1 deletions
diff --git a/clang/lib/Sema/SemaExprCXX.cpp b/clang/lib/Sema/SemaExprCXX.cpp index 68fe52993a0..a7d8c5009b2 100644 --- a/clang/lib/Sema/SemaExprCXX.cpp +++ b/clang/lib/Sema/SemaExprCXX.cpp @@ -5243,7 +5243,13 @@ static bool EvaluateBinaryTypeTrait(Sema &Self, TypeTrait BTT, QualType LhsT, Sema::ContextRAII TUContext(Self, Self.Context.getTranslationUnitDecl()); ExprResult Result = Self.BuildBinOp(/*S=*/nullptr, KeyLoc, BO_Assign, &Lhs, &Rhs); - if (Result.isInvalid() || SFINAE.hasErrorOccurred()) + if (Result.isInvalid()) + return false; + + // Treat the assignment as unused for the purpose of -Wdeprecated-volatile. + Self.CheckUnusedVolatileAssignment(Result.get()); + + if (SFINAE.hasErrorOccurred()) return false; if (BTT == BTT_IsAssignable) diff --git a/clang/test/SemaCXX/deprecated.cpp b/clang/test/SemaCXX/deprecated.cpp index de9e4245734..878c602d83d 100644 --- a/clang/test/SemaCXX/deprecated.cpp +++ b/clang/test/SemaCXX/deprecated.cpp @@ -178,6 +178,8 @@ namespace DeprecatedVolatile { n /= 2; // cxx20-warning {{compound assignment to object of volatile-qualified type 'volatile int' is deprecated}} n %= 42; // cxx20-warning {{compound assignment to object of volatile-qualified type 'volatile int' is deprecated}} + (void)__is_trivially_assignable(volatile int&, int); // no warning + #if __cplusplus >= 201703L struct X { int a, b; }; volatile auto [x, y] = X{1, 2}; // cxx20-warning {{volatile qualifier in structured binding declaration is deprecated}} |