Thread safety analysis: make sure that expressions in attributes are parsed

in an unevaluated context.

llvm-svn: 174644
This commit is contained in:
DeLesley Hutchins 2013-02-07 19:01:07 +00:00
parent 37fea69391
commit eb849c6bd5
2 changed files with 14 additions and 0 deletions

View File

@ -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;

View File

@ -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