Thread safety analysis: prevent a compiler error in cases where a

late-parsed attribute is attached to an invalid declaration.

llvm-svn: 161997
This commit is contained in:
DeLesley Hutchins 2012-08-15 22:41:04 +00:00
parent 18023e4b20
commit 19c722d61d
2 changed files with 12 additions and 1 deletions

View File

@ -866,7 +866,8 @@ void Parser::ParseLexedAttributes(ParsingClass &Class) {
void Parser::ParseLexedAttributeList(LateParsedAttrList &LAs, Decl *D,
bool EnterScope, bool OnDefinition) {
for (unsigned i = 0, ni = LAs.size(); i < ni; ++i) {
LAs[i]->addDecl(D);
if (D)
LAs[i]->addDecl(D);
ParseLexedAttribute(*LAs[i], EnterScope, OnDefinition);
delete LAs[i];
}

View File

@ -1429,4 +1429,14 @@ class Foo {
}
namespace InvalidDeclTest {
class Foo { };
namespace {
void Foo::bar(Mutex* mu) LOCKS_EXCLUDED(mu) { } // \
// expected-error {{cannot define or redeclare 'bar' here because namespace '' does not enclose namespace 'Foo'}} \
// expected-warning {{attribute locks_excluded ignored, because it is not attached to a declaration}}
}
} // end namespace InvalidDeclTest