From: Mark Mitchell Date: Thu, 3 Oct 2002 06:55:01 +0000 (+0000) Subject: re PR c++/7188 (Segfault with template class and recursive (incorrect) initalizer... X-Git-Tag: releases/gcc-3.2.1~216 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=20b632e5f1101138472087725d15a3d2f0c3560d;p=thirdparty%2Fgcc.git re PR c++/7188 (Segfault with template class and recursive (incorrect) initalizer list.) PR c++/7188. * init.c (expand_member_init): Allow a FIELD_DECL to be passed in directly. * pt.c (tsubst_initializer_list): Use expand_member_init. PR c++/7188. * testsuite/g++.dg/template/meminit1.C: New test. From-SVN: r57763 --- diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index f75f91f072d4..37733ab319ed 100644 --- a/gcc/cp/ChangeLog +++ b/gcc/cp/ChangeLog @@ -1,3 +1,10 @@ +2002-10-02 Mark Mitchell + + PR c++/7188. + * init.c (expand_member_init): Allow a FIELD_DECL to be passed in + directly. + * pt.c (tsubst_initializer_list): Use expand_member_init. + 2002-09-04 Jakub Jelinek * decl.c (start_cleanup_fn): Clear interface_only before diff --git a/gcc/cp/init.c b/gcc/cp/init.c index 369e511edd7f..a46d853efa42 100644 --- a/gcc/cp/init.c +++ b/gcc/cp/init.c @@ -1094,7 +1094,10 @@ expand_member_init (exp, name, init) } else { - field = lookup_field (type, name, 1, 0); + if (TREE_CODE (name) == IDENTIFIER_NODE) + field = lookup_field (type, name, 1, 0); + else + field = name; if (! member_init_ok_or_else (field, type, name)) return NULL_TREE; diff --git a/gcc/cp/pt.c b/gcc/cp/pt.c index 2180e4be2968..69789d5d33d9 100644 --- a/gcc/cp/pt.c +++ b/gcc/cp/pt.c @@ -10274,8 +10274,10 @@ tsubst_initializer_list (t, argvec) else init = convert_from_reference (init); - *p = build_tree_list (decl, init); - p = &TREE_CHAIN (*p); + *p = expand_member_init (current_class_ref, decl, + init ? init : void_type_node); + if (*p) + p = &TREE_CHAIN (*p); } return first; } diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 8ad19d448c1e..df33bbab1934 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2002-10-02 Mark Mitchell + + PR c++/7188. + * testsuite/g++.dg/template/meminit1.C: New test. + Thu Sep 5 00:34:33 2002 J"orn Rennecke * gcc.c-torture/execute/loop-14.c: New test.