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

Reply via email to