aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMark Mitchell <mark@codesourcery.com>2002-07-05 16:40:01 +0000
committerMark Mitchell <mmitchel@gcc.gnu.org>2002-07-05 16:40:01 +0000
commit9833f6792a3fc80658167415883160d47ddd68b4 (patch)
treed2f8efa5fa2c3a5ebae7ee24ce51a1b2fad27932
parent7dc17098a2c31f04a702967845220d5b1e4a2336 (diff)
downloadgcc-9833f6792a3fc80658167415883160d47ddd68b4.zip
gcc-9833f6792a3fc80658167415883160d47ddd68b4.tar.gz
gcc-9833f6792a3fc80658167415883160d47ddd68b4.tar.bz2
re PR c++/6706 (ICE with variable-sized arrays and DWARF-1 output)
PR c++/6706 * dwarfout.c (output_reg_number): Fix warning message. (output_bound_representation): Check SAVE_EXPR_RTL is not NULL before using it. PR c++/6706 * g++.dg/debug/debug6.C: New test. * g++.dg/debug/debug7.C: New test. From-SVN: r55264
-rw-r--r--gcc/ChangeLog7
-rw-r--r--gcc/dwarfout.c6
-rw-r--r--gcc/testsuite/ChangeLog6
-rw-r--r--gcc/testsuite/g++.dg/debug/debug6.C7
-rw-r--r--gcc/testsuite/g++.dg/debug/debug7.C18
5 files changed, 42 insertions, 2 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 6c2b06e..767dd73 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,10 @@
+2002-07-03 Mark Mitchell <mark@codesourcery.com>
+
+ PR c++/6706
+ * dwarfout.c (output_reg_number): Fix warning message.
+ (output_bound_representation): Check SAVE_EXPR_RTL is not NULL
+ before using it.
+
2002-07-05 Rainer Orth <ro@TechFak.Uni-Bielefeld.DE>
* gcc/gcc.c (asm_debug): Move initialization ...
diff --git a/gcc/dwarfout.c b/gcc/dwarfout.c
index c26a018..d51e65f 100644
--- a/gcc/dwarfout.c
+++ b/gcc/dwarfout.c
@@ -2077,7 +2077,8 @@ output_reg_number (rtl)
if (regno >= DWARF_FRAME_REGISTERS)
{
- warning_with_decl (dwarf_last_decl, "internal regno botch: regno = %d\n",
+ warning_with_decl (dwarf_last_decl,
+ "internal regno botch: `%s' has regno = %d\n",
regno);
regno = 0;
}
@@ -2294,7 +2295,8 @@ output_bound_representation (bound, dim_num, u_or_l)
|| TREE_CODE (bound) == CONVERT_EXPR)
bound = TREE_OPERAND (bound, 0);
- if (TREE_CODE (bound) == SAVE_EXPR)
+ if (TREE_CODE (bound) == SAVE_EXPR
+ && SAVE_EXPR_RTL (bound))
output_loc_descriptor
(eliminate_regs (SAVE_EXPR_RTL (bound), 0, NULL_RTX));
}
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index 4c8cb75..8880177 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,3 +1,9 @@
+2002-07-03 Mark Mitchell <mark@codesourcery.com>
+
+ PR c++/6706
+ * g++.dg/debug/debug6.C: New test.
+ * g++.dg/debug/debug7.C: New test.
+
Thu Jul 4 07:36:48 2002 J"orn Rennecke <joern.rennecke@superh.com>
* gcc.c-torture/compile/simd-3.c: New test.
diff --git a/gcc/testsuite/g++.dg/debug/debug6.C b/gcc/testsuite/g++.dg/debug/debug6.C
new file mode 100644
index 0000000..64f121b
--- /dev/null
+++ b/gcc/testsuite/g++.dg/debug/debug6.C
@@ -0,0 +1,7 @@
+// { dg-do compile }
+
+void foo()
+{
+ int i=1, x[i];
+}
+
diff --git a/gcc/testsuite/g++.dg/debug/debug7.C b/gcc/testsuite/g++.dg/debug/debug7.C
new file mode 100644
index 0000000..78faa20
--- /dev/null
+++ b/gcc/testsuite/g++.dg/debug/debug7.C
@@ -0,0 +1,18 @@
+// { dg-do compile }
+
+void f (int);
+
+int
+main() {
+
+ int a = 4;
+ int b = 5;
+ int (*x)[b] = new int[a][b];
+
+ x[2][1] = 7;
+
+ for (int i = 0; i < a; ++i)
+ for (int j = 0; j < b; ++j)
+ f (x[i][j]);
+ delete [] x;
+}