PR22034

Mark Mitchell mark@codesourcery.com
Thu Aug 11 00:34:00 GMT 2005


Jan Hubicka wrote:
>>Jan Hubicka wrote:
>>
>>>Hi,
>>>The problem is that statics inside classes have TYPEs as contextes.  I 
>>>think
>>>proper fix is to unwind them up to the containing scope.
>>>
>>>Bootstrapped/regtested i686-pc-gnu-linux, OK?
>>>
>>>       /* For local statics lookup proper context die.  */
>>>       if (TREE_STATIC (decl) && decl_function_context (decl))
>>>! 	{
>>>! 	  tree context = DECL_CONTEXT (decl);
>>>! 
>>>! 	  while (TYPE_P (context))
>>>! 	    context = TYPE_CONTEXT (context);
>>>! 	  context_die = lookup_decl_die (context);
>>>! 	}
>>
>>Note that you can then end up with a FUNCTION_DECL as the context again. 
>> Like:
>>
>>  void f() {
>>   struct S {
>>     void g() {
>>       struct T {
>>         virtual void f();
>>       };
>>     }
>>   }
>> }
>>
>>The virtual table for T will be inside lots of things.
>>
>>So, don't you need to iterate on both conditions?
> 
> 
> Well, I think that in this case the context I should put f() in is g's
> internal scope, but perhaps I am wrong here - dwarf is definitly not my
> domain :(
> I will try to check this out tomorrow unless someone more aware of the
> detials explains it...

If you have that flexibility, why not put it directly in T?  That's 
where it really belongs!

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



More information about the Gcc-patches mailing list