diff options
-rw-r--r-- | lib/Parse/ParseDecl.cpp | 1 | ||||
-rw-r--r-- | test/SemaCXX/warn-thread-safety-analysis.cpp | 13 |
2 files changed, 14 insertions, 0 deletions
diff --git a/lib/Parse/ParseDecl.cpp b/lib/Parse/ParseDecl.cpp index 8e24a14d0b..14fd581ddc 100644 --- a/lib/Parse/ParseDecl.cpp +++ b/lib/Parse/ParseDecl.cpp @@ -1023,6 +1023,7 @@ void Parser::ParseThreadSafetyAttribute(IdentifierInfo &AttrName, // now parse the list of expressions while (Tok.isNot(tok::r_paren)) { + EnterExpressionEvaluationContext Unevaluated(Actions, Sema::Unevaluated); ExprResult ArgExpr(ParseAssignmentExpression()); if (ArgExpr.isInvalid()) { ArgExprsOk = false; diff --git a/test/SemaCXX/warn-thread-safety-analysis.cpp b/test/SemaCXX/warn-thread-safety-analysis.cpp index 26a3df0ef3..3f41124d47 100644 --- a/test/SemaCXX/warn-thread-safety-analysis.cpp +++ b/test/SemaCXX/warn-thread-safety-analysis.cpp @@ -3902,3 +3902,16 @@ class Foo { } // end namespace TestThrowExpr +namespace UnevaluatedContextTest { + +// parse attribute expressions in an unevaluated context. + +static inline Mutex* getMutex1(); +static inline Mutex* getMutex2(); + +void bar() EXCLUSIVE_LOCKS_REQUIRED(getMutex1()); + +void bar2() EXCLUSIVE_LOCKS_REQUIRED(getMutex1(), getMutex2()); + +} // end namespace UnevaluatedContextTest + |