The loop is also responsible for deleting the unparsed attributes. On Wed, Aug 15, 2012 at 3:47 PM, Chandler Carruth <[email protected]> wrote: > On Wed, Aug 15, 2012 at 3:41 PM, DeLesley Hutchins <[email protected]> > wrote: >> >> Author: delesley >> Date: Wed Aug 15 17:41:04 2012 >> New Revision: 161997 >> >> URL: http://llvm.org/viewvc/llvm-project?rev=161997&view=rev >> Log: >> Thread safety analysis: prevent a compiler error in cases where a >> late-parsed attribute is attached to an invalid declaration. >> >> Modified: >> cfe/trunk/lib/Parse/ParseDecl.cpp >> cfe/trunk/test/SemaCXX/warn-thread-safety-parsing.cpp >> >> Modified: cfe/trunk/lib/Parse/ParseDecl.cpp >> URL: >> http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Parse/ParseDecl.cpp?rev=161997&r1=161996&r2=161997&view=diff >> >> ============================================================================== >> --- cfe/trunk/lib/Parse/ParseDecl.cpp (original) >> +++ cfe/trunk/lib/Parse/ParseDecl.cpp Wed Aug 15 17:41:04 2012 >> @@ -866,7 +866,8 @@ >> 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) > > > Why not early return, completely out side of the for loop? > >> >> + LAs[i]->addDecl(D); >> ParseLexedAttribute(*LAs[i], EnterScope, OnDefinition); >> delete LAs[i]; >> } >> >> Modified: cfe/trunk/test/SemaCXX/warn-thread-safety-parsing.cpp >> URL: >> http://llvm.org/viewvc/llvm-project/cfe/trunk/test/SemaCXX/warn-thread-safety-parsing.cpp?rev=161997&r1=161996&r2=161997&view=diff >> >> ============================================================================== >> --- cfe/trunk/test/SemaCXX/warn-thread-safety-parsing.cpp (original) >> +++ cfe/trunk/test/SemaCXX/warn-thread-safety-parsing.cpp Wed Aug 15 >> 17:41:04 2012 >> @@ -1429,4 +1429,14 @@ >> } >> >> >> +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 >> >> >> >> _______________________________________________ >> cfe-commits mailing list >> [email protected] >> http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits > >
-- DeLesley Hutchins | Software Engineer | [email protected] | 505-206-0315 _______________________________________________ cfe-commits mailing list [email protected] http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits
