On Thu, Apr 16, 2015 at 11:11 PM, Jakub Jelinek <ja...@redhat.com> wrote: > Hi! > > As mentioned in the PR, on the following testcase we ICE, because for > # DEBUG D#2 => b > # DEBUG D#1 => a[D#2].t > # DEBUG c => D#1 > during expansion we get the a[D#2].t added as MEM_EXPR of a MEM, and because > we can't mem_loc_descriptor that MEM (I'll post separately a trunk only > patch that fixes that in this case, but generally not all MEMs can be > represented in debug info), we try harder and try to use MEM_EXPR in > loc_list_from_tree, but that one ICEs on DEBUG_EXPR_DECL. There is nothing > we can do for those at this point, debug_exprs are only useful to > var-tracking, so returning NULL is the only thing we can do for those. > > Bootstrapped/regtested on x86_64-linux and i686-linux, ok for trunk and 5.1?
Ok. Thanks, Richard. > 2015-04-16 Jakub Jelinek <ja...@redhat.com> > > PR debug/65771 > * dwarf2out.c (loc_list_from_tree): Return NULL > for DEBUG_EXPR_DECL. > > * gcc.dg/debug/pr65771.c: New test. > > --- gcc/dwarf2out.c.jj 2015-04-16 16:51:52.000000000 +0200 > +++ gcc/dwarf2out.c 2015-04-16 16:57:28.866134980 +0200 > @@ -14642,6 +14642,7 @@ loc_list_from_tree (tree loc, int want_a > > case TARGET_MEM_REF: > case SSA_NAME: > + case DEBUG_EXPR_DECL: > return NULL; > > case COMPOUND_EXPR: > --- gcc/testsuite/gcc.dg/debug/pr65771.c.jj 2015-04-16 17:00:23.811328842 > +0200 > +++ gcc/testsuite/gcc.dg/debug/pr65771.c 2015-04-16 17:00:13.000000000 > +0200 > @@ -0,0 +1,15 @@ > +/* PR debug/65771 */ > +/* { dg-do link } */ > +/* { dg-require-effective-target tls } */ > + > +struct S { int s; int t; }; > +__thread struct S a[10]; > +int b; > + > +int > +main () > +{ > + int c = a[b].t; > + (void) c; > + return 0; > +} > > Jakub