Thread safety analysis: make sure that expressions in attributes are parsed
in an unevaluated context. llvm-svn: 174644
This commit is contained in:
parent
37fea69391
commit
eb849c6bd5
|
@ -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;
|
||||
|
|
|
@ -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
|
||||
|
||||
|
|
Loading…
Reference in New Issue