On Fri, Mar 16, 2012 at 05:14:38PM +0100, Martin Jambor wrote:
> On Mon, Mar 12, 2012 at 11:51:05AM +0100, Richard Guenther wrote:
> > On Thu, Mar 8, 2012 at 12:18 PM, Jakub Jelinek <ja...@redhat.com> wrote:
> > > On Thu, Mar 08, 2012 at 12:06:46PM +0100, Martin Jambor wrote:
> > >> /* For local statics lookup proper context die. */
> > >> - if (TREE_STATIC (decl) && decl_function_context (decl))
> > >> - context_die = lookup_decl_die (DECL_CONTEXT (decl));
> > >> + if (TREE_STATIC (decl) &&
> > >> + (ctx_fndecl = decl_function_context (decl)) != NULL_TREE)
> > >> + context_die = lookup_decl_die (ctx_fndecl);
> > >
> > > The formatting is wrong, && shouldn't be at the end of line.
> > > For the rest I'll defer to Jason, not sure what exactly we want to do
> > > there.
> > > This hunk has been added by Honza:
> > I don't think the patch is right. Suppose you have a function-local
> > class declaration with a static member. Surely the context DIE
> > you want to use is still the class one, not the function one.
> That is not what happens, though. The problem is that we attempt to
> generate debug info for VMTs of classes defined within functions. I
> have filed PR 52605 with a small testcase to track the issue.
> I have not yet had a look at how this code treats (or should treat)
> static members of classes defined within a function.
It turs out that local classes are not allowed to have static data
members. GCC will compile such class with -fpermissive but then the
linker fails with an undefined reference because the data member is
not defined anywhere and I did not manage to figure out or google how
to define it. Therefore I think this is not an issue.
It seems to me that dwarf2out_decl was intended to supply either
comp_unit_die or a function decl die as the context to gen_decl_die
(which detects memberr-ness by decl_class_context) and thus I still
tend to think my patch (with adjusted formatting) is a correct and
simple fix. Nevertheless I'll be happy to learn more if I am wrong.