From: Mark Mitchell Date: Fri, 5 Jul 2002 16:37:44 +0000 (+0000) Subject: re PR c++/6706 (ICE with variable-sized arrays and DWARF-1 output) X-Git-Tag: releases/gcc-3.1.1~52 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=63a1d27cb50ba2b8e1956414211cc8d93df2c184;p=thirdparty%2Fgcc.git 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: r55263 --- diff --git a/gcc/ChangeLog b/gcc/ChangeLog index d33b6fbd6686..411d825e1e36 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,10 @@ +2002-07-03 Mark Mitchell + + 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-03 Richard Henderson * config/i386/i386.md (prologue_get_pc): Issue pop here ... diff --git a/gcc/dwarfout.c b/gcc/dwarfout.c index 76b5b75383b4..481d0c0441a3 100644 --- a/gcc/dwarfout.c +++ b/gcc/dwarfout.c @@ -2086,7 +2086,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; } @@ -2303,7 +2304,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 56d9ea13c244..afbd316398a3 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,9 @@ +2002-07-03 Mark Mitchell + + PR c++/6706 + * g++.dg/debug/debug6.C: New test. + * g++.dg/debug/debug7.C: New test. + 2002-07-03 Kriang Lerdsuwanakij PR c++/6944 diff --git a/gcc/testsuite/g++.dg/debug/debug6.C b/gcc/testsuite/g++.dg/debug/debug6.C new file mode 100644 index 000000000000..64f121b00ad1 --- /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 000000000000..78faa20ff030 --- /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; +}