]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
re PR c++/7188 (Segfault with template class and recursive (incorrect) initalizer...
authorMark Mitchell <mark@codesourcery.com>
Thu, 3 Oct 2002 06:55:01 +0000 (06:55 +0000)
committerMark Mitchell <mmitchel@gcc.gnu.org>
Thu, 3 Oct 2002 06:55:01 +0000 (06:55 +0000)
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

gcc/cp/ChangeLog
gcc/cp/init.c
gcc/cp/pt.c
gcc/testsuite/ChangeLog

index f75f91f072d47c76cdaab1f77e2380e5e7e13acf..37733ab319ed32be527af42624a359761a221796 100644 (file)
@@ -1,3 +1,10 @@
+2002-10-02  Mark Mitchell  <mark@codesourcery.com>
+
+       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  <jakub@redhat.com>
 
        * decl.c (start_cleanup_fn): Clear interface_only before
index 369e511edd7f3442b195693ad0fc33cab6de848c..a46d853efa422e19bc1828793df1a3f6d5604e08 100644 (file)
@@ -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;
index 2180e4be2968bde196dcc86338ab32487d083e56..69789d5d33d9a4bbc1eff27134d0e8b605bba090 100644 (file)
@@ -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;
 }
index 8ad19d448c1ef5f25b5aae010de29fd9a97fbb9e..df33bbab19343819bb918a83b476db0aea70f1dc 100644 (file)
@@ -1,3 +1,8 @@
+2002-10-02  Mark Mitchell  <mark@codesourcery.com>
+
+       PR c++/7188.
+       * testsuite/g++.dg/template/meminit1.C: New test.
+
 Thu Sep  5 00:34:33 2002  J"orn Rennecke <joern.rennecke@superh.com>
 
        * gcc.c-torture/execute/loop-14.c: New test.