[cfe-commits] r161997 - in /cfe/trunk: lib/Parse/ParseDecl.cpp test/SemaCXX/warn-thread-safety-parsing.cpp

Delesley Hutchins delesley at google.com
Wed Aug 15 16:02:44 PDT 2012


The loop is also responsible for deleting the unparsed attributes.

On Wed, Aug 15, 2012 at 3:47 PM, Chandler Carruth <chandlerc at google.com> wrote:
> On Wed, Aug 15, 2012 at 3:41 PM, DeLesley Hutchins <delesley at google.com>
> 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
>> cfe-commits at cs.uiuc.edu
>> http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits
>
>



-- 
DeLesley Hutchins | Software Engineer | delesley at google.com | 505-206-0315



More information about the cfe-commits mailing list