[cfe-dev] PATCH: Cleanup function redeclaration representations

Argiris Kirtzidis akyrtzi at gmail.com
Thu Apr 24 13:36:39 PDT 2008


Argiris Kirtzidis wrote:
> Doug Gregor wrote:
>> On Thu, Apr 24, 2008 at 11:21 AM, Argiris Kirtzidis 
>> <akyrtzi at gmail.com> wrote:
>>  
>>>  The point here is, given a decl #1 and a redecl #2, is there an 
>>> advantage
>>> in merging #1 -> #2, instead of #2 -> #1 ?
>>>     
>>
>> Merging #1 into #2 means that both #1 and #2 contain all of the
>> information that its corresponding declarations contains. #1 contains
>> all of the information about the first declaration of "f", including
>> the exact type (with typedefs and such), parameter names, and which
>> default arguments were present. #2 contains all of the information
>> about the second declaration, its exact parameter types, parameter
>> names, etc., which includes the merging of default arguments.
>> (Semantically, the merged default arguments become a part of the
>> declaration at #2).
>>
>> So, merging #1 into #2 this gives us very precise information about
>> each of the declaration. I don't see how we can keep all of that
>> information when merging #2 into #1, unless we do something like the
>> "swap" trick that I'm already doing. Just merging #2 into #1 directly
>> means that we'll lose the source information that was in #1. Or
>> perhaps you are thinking of a different way of doing this merge?
>>   
>
> How about having a merge more like #1 <-> #2 :
>
> (1)  -#2 merges default args from #1
> (2)  -#2 is checked for error diagnostics about default args
> (3)  -#1 gets default args from #2        \ (4)  
> -(#1)->setNextDeclaration(#2)      ----  (maybe 3,4 are performed in 
> addRedeclaration method)
> (5)  -#2 is returned by the parser but only #1 is visible in scope, 
> thus all uses of the function will point to the same FunctionDecl node 
> (#1)
>
> In the end, both #1 and #2 contain all of the information that its 
> corresponding declarations contain.
> Merged default arguments become a part of both declarations.
> Name lookup returns #1, which has all the necessary semantic 
> information about default args.
>
> Will this work or am I missing something ?

Another thing I forgot to mention is that I believe that a name should 
be associated with the declaration that firstly introduces it in the source,
not the latest redeclaration. Do you find this reasonable or does it 
have disadvantages ?



More information about the cfe-dev mailing list