From 7509ef2f4bfd292cc7ee8f73e2af41369b413ebb Mon Sep 17 00:00:00 2001 From: Volker Reichelt Date: Fri, 2 Dec 2005 12:38:30 +0000 Subject: [PATCH] re PR c++/24103 (ICE in simple_cst_equal) PR c++/24103 Backport: 2002-08-22 Diego Novillo * tree.c (simple_cst_equal): Call simple_cst_list_equal to compare CONSTRUCTOR_ELTS pointers. PR c++/24103 * g++.dg/other/default1.C: New test. From-SVN: r107888 --- gcc/ChangeLog | 9 +++++++++ gcc/testsuite/ChangeLog | 5 +++++ gcc/testsuite/g++.dg/other/default1.C | 22 ++++++++++++++++++++++ gcc/tree.c | 6 ++---- 4 files changed, 38 insertions(+), 4 deletions(-) create mode 100644 gcc/testsuite/g++.dg/other/default1.C diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 972cfd54216f..099f12bed4e1 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,12 @@ +2005-12-02 Volker Reichelt + + PR c++/24103 + Backport: + 2002-08-22 Diego Novillo + + * tree.c (simple_cst_equal): Call simple_cst_list_equal to compare + CONSTRUCTOR_ELTS pointers. + 2005-12-01 Gabriel Dos Reis * version.c: Bump version number. diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 75b67062610a..ee18a9ee2327 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2005-12-02 Volker Reichelt + + PR c++/24103 + * g++.dg/other/default1.C: New test. + 2005-12-01 Kaveh R. Ghazi Backport: diff --git a/gcc/testsuite/g++.dg/other/default1.C b/gcc/testsuite/g++.dg/other/default1.C new file mode 100644 index 000000000000..a6d968185637 --- /dev/null +++ b/gcc/testsuite/g++.dg/other/default1.C @@ -0,0 +1,22 @@ +// PR c++/24103 +// ICE in simple_cst_equal +// Origin: Alexander Stepanov +// { dg-do compile } +// { dg-options "" } + +struct S +{ + int i; +}; + +struct A +{ + A(S = (S){0}); +}; + +struct B +{ + B(S = (S){0}); +}; + +B::B(S) {} diff --git a/gcc/tree.c b/gcc/tree.c index c1ca94777596..a9b6d1a9b757 100644 --- a/gcc/tree.c +++ b/gcc/tree.c @@ -3417,10 +3417,8 @@ simple_cst_equal (tree t1, tree t2) TREE_STRING_LENGTH (t1))); case CONSTRUCTOR: - if (CONSTRUCTOR_ELTS (t1) == CONSTRUCTOR_ELTS (t2)) - return 1; - else - abort (); + return simple_cst_list_equal (CONSTRUCTOR_ELTS (t1), + CONSTRUCTOR_ELTS (t2)); case SAVE_EXPR: return simple_cst_equal (TREE_OPERAND (t1, 0), TREE_OPERAND (t2, 0)); -- 2.47.2