[3.4 PATCH] Fix inline nested functions (PR middle-end/15345, c/16450)

Mark Mitchell mark@codesourcery.com
Wed Jul 21 00:23:00 GMT 2004


Jakub Jelinek wrote:

>On Tue, Jul 20, 2004 at 03:30:53PM -0400, Jason Merrill wrote:
>  
>
>>>>>+	      || (cgraph_n_nodes > 0 && cgraph_node (decl)->origin))
>>>>>          
>>>>>
>>>>decl_function_context (decl) is the canonical way to test for nested.
>>>>
>>>>        
>>>>
>>>Just to be clear, in C++, with:
>>>
>>>  void f() { struct S { void g() { } }; };
>>>
>>>the "g" function will have a non-NULL decl_function_context, but is not
>>>"nested" in the sense of GNU C nested functions; for example, "g" cannot
>>>refer to automatic variables in "f".
>>>      
>>>
>>It's not nested in the sense of needing a static chain, but it is nested in
>>the sense of being within the scope of f, which I think is what cgraph
>>wants to check.
>>    
>>
>
>Actually, it is not nested in the cgraph sense.
>cgraph nesting is:
>  if (DECL_CONTEXT (decl) && TREE_CODE (DECL_CONTEXT (decl)) == FUNCTION_DECL)
>  
>
That makes sense to me.

The decl_function_context test is purely about the scope of names; it 
should not be relevant from a code-generation point of view.

-- 
Mark Mitchell
CodeSourcery, LLC
(916) 791-8304
mark@codesourcery.com



More information about the Gcc-patches mailing list