aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorJason Merrill <jason@redhat.com>2010-02-23 13:32:09 -0500
committerJason Merrill <jason@gcc.gnu.org>2010-02-23 13:32:09 -0500
commit3adcf52c820f3a0bab965fd40c4713fbc220cbaa (patch)
tree0cff02b0c33cf25a24f5ba9e768b3b1e81863f56 /gcc
parenta3b20e90b15f4022bbc6851b11e1950b89c3b961 (diff)
downloadgcc-3adcf52c820f3a0bab965fd40c4713fbc220cbaa.zip
gcc-3adcf52c820f3a0bab965fd40c4713fbc220cbaa.tar.gz
gcc-3adcf52c820f3a0bab965fd40c4713fbc220cbaa.tar.bz2
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
Diffstat (limited to 'gcc')
-rw-r--r--gcc/ChangeLog4
-rw-r--r--gcc/cfgexpand.c27
-rw-r--r--gcc/testsuite/ChangeLog9
-rw-r--r--gcc/testsuite/c-c++-common/dwarf2/vla1.c11
-rw-r--r--gcc/testsuite/g++.dg/debug/dwarf2/dwarf2.exp2
-rw-r--r--gcc/testsuite/gcc.dg/debug/dwarf2/dwarf2.exp2
6 files changed, 38 insertions, 17 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index b148e67..0361b40 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,5 +1,9 @@
2010-02-23 Jason Merrill <jason@redhat.com>
+ 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 d9b5774..f5677a3 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 ee078d1..7fe3520 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,3 +1,10 @@
+2010-02-23 Jason Merrill <jason@redhat.com>
+
+ 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 <jakub@redhat.com>
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 <sebastian.pop@amd.com>
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 0000000..e814bf5
--- /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 1255d06..1a874f8 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 73c2c44..74136ae 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
}