From 3adcf52c820f3a0bab965fd40c4713fbc220cbaa Mon Sep 17 00:00:00 2001 From: Jason Merrill Date: Tue, 23 Feb 2010 13:32:09 -0500 Subject: [PATCH] re PR debug/42800 (VLA DW_AT_upper_bound is no longer emitted) PR debug/42800 * cfgexpand.c (expand_used_vars): Keep artificial non-ignored vars in cfun->local_decls even if they have register types. From-SVN: r157014 --- gcc/ChangeLog | 4 +++ gcc/cfgexpand.c | 27 ++++++++++---------- gcc/testsuite/ChangeLog | 9 ++++++- gcc/testsuite/c-c++-common/dwarf2/vla1.c | 11 ++++++++ gcc/testsuite/g++.dg/debug/dwarf2/dwarf2.exp | 2 +- gcc/testsuite/gcc.dg/debug/dwarf2/dwarf2.exp | 2 +- 6 files changed, 38 insertions(+), 17 deletions(-) create mode 100644 gcc/testsuite/c-c++-common/dwarf2/vla1.c diff --git a/gcc/ChangeLog b/gcc/ChangeLog index b148e67d11d..0361b40677d 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,5 +1,9 @@ 2010-02-23 Jason Merrill + PR debug/42800 + * cfgexpand.c (expand_used_vars): Keep artificial non-ignored vars + in cfun->local_decls even if they have register types. + PR c++/42837 * stor-layout.c (place_field): Don't warn about unnecessary DECL_PACKED if the type is packed. diff --git a/gcc/cfgexpand.c b/gcc/cfgexpand.c index d9b5774c006..f5677a3c1ee 100644 --- a/gcc/cfgexpand.c +++ b/gcc/cfgexpand.c @@ -1331,8 +1331,7 @@ expand_used_vars (void) if (is_gimple_reg (var)) { TREE_USED (var) = 0; - ggc_free (t); - continue; + goto next; } /* We didn't set a block for static or extern because it's hard to tell the difference between a global variable (re)declared @@ -1353,20 +1352,20 @@ expand_used_vars (void) TREE_USED (var) = 1; if (expand_now) + expand_one_var (var, true, true); + + next: + if (DECL_ARTIFICIAL (var) && !DECL_IGNORED_P (var)) { - expand_one_var (var, true, true); - if (DECL_ARTIFICIAL (var) && !DECL_IGNORED_P (var)) - { - rtx rtl = DECL_RTL_IF_SET (var); + rtx rtl = DECL_RTL_IF_SET (var); - /* Keep artificial non-ignored vars in cfun->local_decls - chain until instantiate_decls. */ - if (rtl && (MEM_P (rtl) || GET_CODE (rtl) == CONCAT)) - { - TREE_CHAIN (t) = cfun->local_decls; - cfun->local_decls = t; - continue; - } + /* Keep artificial non-ignored vars in cfun->local_decls + chain until instantiate_decls. */ + if (rtl && (MEM_P (rtl) || GET_CODE (rtl) == CONCAT)) + { + TREE_CHAIN (t) = cfun->local_decls; + cfun->local_decls = t; + continue; } } diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index ee078d14368..7fe352009aa 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,10 @@ +2010-02-23 Jason Merrill + + PR debug/42800 + * gcc.dg/debug/dwarf2/dwarf2.exp: Run c-c++-common dwarf2 tests. + * g++.dg/debug/dwarf2/dwarf2.exp: Likewise. + * c-c++-common/dwarf2/vla1.c: New. + 2010-02-23 Jakub Jelinek PR target/43139 @@ -12,7 +19,7 @@ * gcc.dg/march.c: New. * gcc.dg/march-generic.c: New. * gcc.dg/mtune.c: New. - + 2010-02-22 Sebastian Pop PR middle-end/43083 diff --git a/gcc/testsuite/c-c++-common/dwarf2/vla1.c b/gcc/testsuite/c-c++-common/dwarf2/vla1.c new file mode 100644 index 00000000000..e814bf56844 --- /dev/null +++ b/gcc/testsuite/c-c++-common/dwarf2/vla1.c @@ -0,0 +1,11 @@ +// PR debug/42800 +// { dg-options "-gdwarf-2 -dA" } +// { dg-final { scan-assembler "DW_AT_upper_bound" } } + +int +f (int i) +{ + char a[i]; + + return a[0]; +} diff --git a/gcc/testsuite/g++.dg/debug/dwarf2/dwarf2.exp b/gcc/testsuite/g++.dg/debug/dwarf2/dwarf2.exp index 1255d0630e7..1a874f8db49 100644 --- a/gcc/testsuite/g++.dg/debug/dwarf2/dwarf2.exp +++ b/gcc/testsuite/g++.dg/debug/dwarf2/dwarf2.exp @@ -35,7 +35,7 @@ set comp_output [g++_target_compile \ if { ! [string match "*: target system does not support the * debug format*" \ $comp_output] } { remove-build-file "trivial.S" - dg-runtest [lsort [glob -nocomplain $srcdir/$subdir/*.\[C\]]] \ + dg-runtest [lsort [glob -nocomplain $srcdir/$subdir/*.C $srcdir/c-c++-common/dwarf2/*.c]] \ "" $DEFAULT_CFLAGS } diff --git a/gcc/testsuite/gcc.dg/debug/dwarf2/dwarf2.exp b/gcc/testsuite/gcc.dg/debug/dwarf2/dwarf2.exp index 73c2c44aebd..74136aec353 100644 --- a/gcc/testsuite/gcc.dg/debug/dwarf2/dwarf2.exp +++ b/gcc/testsuite/gcc.dg/debug/dwarf2/dwarf2.exp @@ -35,7 +35,7 @@ set comp_output [gcc_target_compile \ if { ! [string match "*: target system does not support the * debug format*" \ $comp_output] } { remove-build-file "trivial.S" - dg-runtest [lsort [glob -nocomplain $srcdir/$subdir/*.\[cS\]]] \ + dg-runtest [lsort [glob -nocomplain $srcdir/$subdir/*.\[cS\] $srcdir/c-c++-common/dwarf2/*.c]] \ "" $DEFAULT_CFLAGS } -- 2.30.2