Message ID | 20161025180612.GA3541@tucnak.redhat.com |
---|---|
State | New |
Headers | show |
On Tue, Oct 25, 2016 at 08:06:12PM +0200, Jakub Jelinek wrote: > I think this patch should fix it, will bootstrap/regtest it now: > > 2016-10-25 Jakub Jelinek <jakub@redhat.com> > > * dwarf2out.c (gen_member_die): Only reparent_child instead of > splice_child_die if child doesn't have DW_AT_specification attribute. Bootstrapped/regtested on x86_64-linux and i686-linux now, with this patch C++14 static data members are treated in debug info as they were in the past, just C++17 static constexpr data mambers or other static inline data members are treated the new way (definition in DW_TAG_member). Ok for trunk? > --- gcc/dwarf2out.c.jj 2016-10-25 19:49:28.000000000 +0200 > +++ gcc/dwarf2out.c 2016-10-25 20:02:33.264639847 +0200 > @@ -22624,7 +22624,8 @@ gen_member_die (tree type, dw_die_ref co > /* Handle inline static data members, which only have in-class > declarations. */ > if (child->die_tag == DW_TAG_variable > - && child->die_parent == comp_unit_die ()) > + && child->die_parent == comp_unit_die () > + && get_AT (child, DW_AT_specification) == NULL) > { > reparent_child (child, context_die); > child->die_tag = DW_TAG_member; > Jakub
On Tue, Oct 25, 2016 at 7:06 PM, Jakub Jelinek <jakub@redhat.com> wrote: > > I think this patch should fix it, will bootstrap/regtest it now: > Yes, the fails in gdb.cp/member-ptr.exp go away with the patched g++. I run gdb.cp/member-ptr.exp with three different c++ variations, Schedule of variations: unix/-std=c++03 unix/-std=c++11 unix/-std=c++1z Thanks for the fix.
OK. On Tue, Oct 25, 2016 at 3:56 PM, Jakub Jelinek <jakub@redhat.com> wrote: > On Tue, Oct 25, 2016 at 08:06:12PM +0200, Jakub Jelinek wrote: >> I think this patch should fix it, will bootstrap/regtest it now: >> >> 2016-10-25 Jakub Jelinek <jakub@redhat.com> >> >> * dwarf2out.c (gen_member_die): Only reparent_child instead of >> splice_child_die if child doesn't have DW_AT_specification attribute. > > Bootstrapped/regtested on x86_64-linux and i686-linux now, with this > patch C++14 static data members are treated in debug info as they were in > the past, just C++17 static constexpr data mambers or other static inline > data members are treated the new way (definition in DW_TAG_member). > > Ok for trunk? > >> --- gcc/dwarf2out.c.jj 2016-10-25 19:49:28.000000000 +0200 >> +++ gcc/dwarf2out.c 2016-10-25 20:02:33.264639847 +0200 >> @@ -22624,7 +22624,8 @@ gen_member_die (tree type, dw_die_ref co >> /* Handle inline static data members, which only have in-class >> declarations. */ >> if (child->die_tag == DW_TAG_variable >> - && child->die_parent == comp_unit_die ()) >> + && child->die_parent == comp_unit_die () >> + && get_AT (child, DW_AT_specification) == NULL) >> { >> reparent_child (child, context_die); >> child->die_tag = DW_TAG_member; >> > > Jakub
--- gcc/dwarf2out.c.jj 2016-10-25 19:49:28.000000000 +0200 +++ gcc/dwarf2out.c 2016-10-25 20:02:33.264639847 +0200 @@ -22624,7 +22624,8 @@ gen_member_die (tree type, dw_die_ref co /* Handle inline static data members, which only have in-class declarations. */ if (child->die_tag == DW_TAG_variable - && child->die_parent == comp_unit_die ()) + && child->die_parent == comp_unit_die () + && get_AT (child, DW_AT_specification) == NULL) { reparent_child (child, context_die); child->die_tag = DW_TAG_member;