On Fri, Apr 29, 2022 at 01:23:46PM +0200, Richard Biener wrote: > On Fri, 29 Apr 2022, Jakub Jelinek wrote: > > > On Fri, Apr 29, 2022 at 01:11:31PM +0200, Jakub Jelinek via Gcc-patches > > wrote: > > > Depends. DECL_IN_CONSTANT_POOL decls can appear 2 ways, through > > > tree_output_constant_def which does create a varpool node for them > > > and is generally invoked during GIMPLE passes or so, and using > > > output_constant_def, which is called during expansion or later and doesn't > > > have varpool nodes created unless say alias.cc creates those for them. > > > > Oh, and one thing I forgot. The constant pool decls can be put into section > > anchors, so it is essential that we handle DECL_IN_CONSTANT_POOL decls > > there and don't just punt on those. > > Ah, OK - that makes sense (maybe we should create varpool nodes at the > point we associate them with anchors, or alternatively use the varpool > node of the anchor?).
I've bootstrapped/regtested the following on x86_64-linux and i686-linux, then bootstrapped with the patch reverted, reapplied the patch and did make cc1plus in stage3. The debug section sizes are identical, .debug_info and .debug_loc is identical too, so I think we don't lose any debug info through it. Ok for trunk? 2022-05-02 Jakub Jelinek <ja...@redhat.com> PR debug/105415 * cfgexpand.cc (expand_debug_expr): Don't make_decl_rtl_for_debug if there is no symtab node for the VAR_DECL. * gcc.dg/pr105415.c: New test. --- gcc/cfgexpand.cc.jj 2022-03-09 19:54:17.112284770 +0100 +++ gcc/cfgexpand.cc 2022-04-29 12:33:32.585363999 +0200 @@ -4565,7 +4565,8 @@ expand_debug_expr (tree exp) || !DECL_NAME (exp) || DECL_HARD_REGISTER (exp) || DECL_IN_CONSTANT_POOL (exp) - || mode == VOIDmode) + || mode == VOIDmode + || symtab_node::get (exp) == NULL) return NULL; op0 = make_decl_rtl_for_debug (exp); --- gcc/testsuite/gcc.dg/pr105415.c.jj 2022-04-28 12:26:13.174302870 +0200 +++ gcc/testsuite/gcc.dg/pr105415.c 2022-04-28 12:25:36.770809149 +0200 @@ -0,0 +1,26 @@ +/* PR debug/105415 */ +/* { dg-do compile } */ +/* { dg-require-effective-target pthread } */ +/* { dg-options "-O2 -ftree-parallelize-loops=2 -fcompare-debug" } */ + +int m; +static int n; + +void +foo (void) +{ + int s = 0; + + while (m < 1) + { + s += n; + ++m; + } +} + +void +bar (int *arr, int i) +{ + while (i < 1) + arr[i++] = 1; +} Jakub