[cfe-dev] PATCH: Cleanup function redeclaration representations
Chris Lattner
clattner at apple.com
Sat May 3 23:01:47 PDT 2008
... catching up on clang, sorry for the delay...
On Apr 20, 2008, at 7:04 PM, Doug Gregor wrote:
>> Some minor thoughts:
>>
>> What is the intended ownership model of the previous declarations?
>> I see
>> that your patch has functiondecl delete other definitions when the
>> functiondecl is deleted, is this intended, or do you think
>> TranslationUnit
>> should own the previous declarations? Is the intent that a client
>> would
>> walk a declaration list for the translation unit and only see each
>> function
>> once... walking the prev declaration list to see other
>> declarations? This
>> model makes sense to me, but it would be nice to explicitly say this
>> somewhere in a prominent comment.
>
> Yes, this was the intent. Since all of the function declarations
> represent the same function, I think it makes the most sense for that
> function to only have one entry in the translation unit's list of
> declarations, because there really is only one function being
> declared. Those (probably few) clients that want to know about *all*
> declarations of a function can walk the previous-declaration chains.
Makes sense.
>> It is a little strange to me that getBody() can return non-null if
>> isDefinition() return false. How about renaming getBody() ->
>> findBody() and
>> having getBody() just return the local function?
>
> I think perhaps the name of isDefinition is really the cause of the
> problem here, and that's the name we should change. I've gone with the
> *very* explicit isThisDeclarationADefinition, because this is a
> special-purpose question about (essentially) the ordering of the
> re-declarations. I only expect it to be used in a few diagnostics,
> where we want to say "f is (declared|defined) here".
Sounds good.
> I think splitting getBody into findBody() (which walks the tree) and
> getBody() will end up being confusing. Most of the time, all we care
> about is "is there a definition for this function?" Having two
> functions to answer that question (which produce the same answer
> except in very weird cases; see below) is going to cause clients
> trouble.
Right.
>> Also, is there ever a case
>> where getBody could ever return a FunctionDecl other than 'this'?
>> I thought
>> definitions were always at the front of the list.
>
> Surprisingly, no. One can actually write, e.g.,
>
> void f(int x) { }
> void f(int x = 5);
Yuck, ok. :)
-Chris
More information about the cfe-dev
mailing list