[cfe-dev] The DeclContext of block-scope function declarations.

Enea Zaffanella zaffanella at cs.unipr.it
Tue Jul 31 01:51:28 PDT 2012


Ping^2.

On 07/13/2012 09:17 AM, Enea Zaffanella wrote:
> Ping.
>
> On 07/09/2012 10:57 AM, Enea Zaffanella wrote:
>> Consider the following program:
>>
>> $ cat block.cc
>> namespace N {
>>
>> void f() {
>>      extern int var;     // #1
>>      extern void g(int); // #2
>>      g(var);
>> }
>>
>> class S {
>>      friend void h();    // #3
>> };
>>
>> } // namespace N
>>
>>
>> Function N::f() declares extern function `g(int)' and int object `var'.
>> In the AST generated by clang, these two block-scope declarations have
>> function N::f() as their (semantic and lexical) DeclContext.
>>
>> However, C++11 3.5p7 says:
>>
>>      "When a block scope declaration of an entity with linkage is not
>>       found to refer to some other declaration, then that entity is a
>>       member of the innermost enclosing namespace. However such a
>>       declaration does not introduce the member name in its
>>       namespace scope."
>>
>> This seems to suggest that both `g(int)' and `var' should have namespace
>> N as their semantic DeclContext (but be "hidden" there), while still
>> having f() as their lexical DeclContext. That is, things should be (more
>> or less) similar to the case of friend function h() in class S.
>>
>> As an example where this DeclContext issue matters, when calling method
>>
>>       NamedDecl::getQualifiedNameAsString()
>>
>> on the three declarations we obtain:
>>
>>       #1  var     // wrong, should be N::var
>>       #2  g       // wrong, should be N::g
>>       #3  N::h    // correct
>>
>> We would appreciate if someone could confirm the issue and diagnosis
>> above, as well as hinting at the places in Sema that need to be modified
>> to obtain the correct behavior.
>>
>> Cheers,
>> Enea.
>> _______________________________________________
>> cfe-dev mailing list
>> cfe-dev at cs.uiuc.edu
>> http://lists.cs.uiuc.edu/mailman/listinfo/cfe-dev
>>
>
>
> _______________________________________________
> cfe-dev mailing list
> cfe-dev at cs.uiuc.edu
> http://lists.cs.uiuc.edu/mailman/listinfo/cfe-dev
>




More information about the cfe-dev mailing list