[cfe-commits] r60897 - in /cfe/trunk: include/clang/AST/Decl.h lib/AST/ASTContext.cpp lib/AST/DeclBase.cpp lib/Analysis/RegionStore.cpp lib/CodeGen/CodeGenTypes.cpp lib/Sema/SemaCXXScopeSpec.cpp lib/Sema/SemaDecl.cpp lib/Sema/SemaDeclCXX.cpp lib/Sema/SemaInit.cpp lib/Sema/SemaOverload.cpp

Douglas Gregor dgregor at apple.com
Thu Dec 11 14:22:20 PST 2008


On Dec 11, 2008, at 12:56 PM, Chris Lattner wrote:

> On Dec 11, 2008, at 12:41 PM, Douglas Gregor wrote:
>> URL: http://llvm.org/viewvc/llvm-project?rev=60897&view=rev
>> Log:
>> Address some comments on the name lookup/DeclContext patch from Chris
>
> Awesome, thanks Doug!
>
>>
>> @@ -227,17 +227,32 @@
>>  if (getLangOptions().CPlusPlus && (NS & Decl::IDNS_Ordinary))
>>    NS |= Decl::IDNS_Tag;
>>
>> +  if (LookupCtx == 0 &&
>> +      (!getLangOptions().CPlusPlus || (NS == Decl::IDNS_Label))) {
>> +    // Unqualified name lookup in C/Objective-C and name lookup for
>> +    // labels in C++ is purely lexical, so search in the
>> +    // declarations attached to the name.
>
> Thanks for doing this.  One question that I thought I'd raise: name  
> lookup for labels is sufficiently different (and extremely simple)  
> that it might make sense to have a LookupLabelDecl() that is  
> separate from LookupDecl().  I think labels can *never* be used with  
> qualified names, can never be autosynth'd from builtins, etc.  Also,  
> the call sites for LookupDecl all know whether they want a label or  
> not.
>
> Do you think it would make sense to split labels out from other  
> decls for lookup?

Hah! It turns out that we never actually use IDNS_Label in Clang :).  
Labels go into the LabelMap (indexed by identifier), and never hit the  
IdResolver.

>
>>
>> +    assert(!LookupCtx && "Can't perform qualified name lookup  
>> here");
>>
>> +    IdentifierResolver::iterator I
>> +      = IdResolver.begin(Name, CurContext, LookInParent);
>> +
>> +    // Scan up the scope chain looking for a decl that matches this
>> +    // identifier that is in the appropriate namespace.  This search
>> +    // should not take long, as shadowing of names is uncommon, and
>> +    // deep shadowing is extremely uncommon.
>> +    for (; I != IdResolver.end(); ++I)
>
> This evaluates .end() each time through the loop :)

You're relentless! :)

>
>> +++ cfe/trunk/lib/Sema/SemaInit.cpp Thu Dec 11 14:41:00 2008
>> @@ -41,7 +41,7 @@
>>
>> int InitListChecker::numStructUnionElements(QualType DeclType) {
>>  RecordDecl *structDecl = DeclType->getAsRecordType()->getDecl();
>> -  int InitializableMembers
>> +  const int InitializableMembers
>>    = std::count_if(structDecl->field_begin(), structDecl->field_end 
>> (),
>>                    std::mem_fun(&FieldDecl::getDeclName));
>
> instead of 'const int', how about 'unsigned'?


Sure.

	- Doug



More information about the cfe-commits mailing list