Each of the following lines triggers an ICE since GCC 3.3: ======================================================= void* p = new __complex__ int (); void* q = new int __attribute__((vector_size(8))) (); ======================================================= bug.cc:1: internal compiler error: in build_zero_init, at cp/init.c:252 Please submit a full bug report, [etc.] This is because build_zero_init doesn't handle COMPLEX_TYPE and VECTOR_TYPE. Before GCC 3.3 the code was rejected.
This is valid with extension rule. We should produce an empty CONSTRUCTOR for these two cases. If I get time this weekend I will look more into this.
Here is a patch (though I have looked to see if it works with templates yet): Index: init.c =================================================================== --- init.c (revision 116236) +++ init.c (working copy) @@ -178,7 +178,8 @@ build_zero_init (tree type, tree nelts, items with static storage duration that are not otherwise initialized are initialized to zero. */ ; - else if (SCALAR_TYPE_P (type)) + else if (SCALAR_TYPE_P (type) + || TREE_CODE (type) == COMPLEX_TYPE) init = convert (type, integer_zero_node); else if (CLASS_TYPE_P (type)) { @@ -248,6 +249,8 @@ build_zero_init (tree type, tree nelts, /* Build a constructor to contain the initializations. */ init = build_constructor (type, v); } + else if (TREE_CODE (type) == VECTOR_TYPE) + init = fold_convert (type, integer_zero_node); else gcc_assert (TREE_CODE (type) == REFERENCE_TYPE);
Mine.
Subject: Bug number PR C++/28450 A patch for this bug has been added to the patch tracker. The mailing list url for the patch is http://gcc.gnu.org/ml/gcc-patches/2006-08/msg00793.html
Subject: Bug 28450 Author: pinskia Date: Wed Aug 23 02:56:43 2006 New Revision: 116341 URL: http://gcc.gnu.org/viewcvs?root=gcc&view=rev&rev=116341 Log: 2006-08-21 Andrew Pinski <pinskia@physics.uc.edu> PR C++/28450 * cp/init.c (build_zero_init): Handle VECTOR_TYPE and COMPLEX_TYPEs. 2006-08-21 Andrew Pinski <pinskia@physics.uc.edu> PR C++/28450 * g++.dg/ext/vector4.C: New test. * g++.dg/ext/complex1.C: New test. Added: trunk/gcc/testsuite/g++.dg/ext/complex1.C trunk/gcc/testsuite/g++.dg/ext/vector4.C Modified: trunk/gcc/cp/ChangeLog trunk/gcc/cp/init.c trunk/gcc/testsuite/ChangeLog
Fixed on the mainline, will apply to the branches after a week.
Subject: Bug 28450 Author: pinskia Date: Fri Oct 6 13:06:56 2006 New Revision: 117502 URL: http://gcc.gnu.org/viewcvs?root=gcc&view=rev&rev=117502 Log: 2006-10-06 Andrew Pinski <pinskia@physics.uc.edu> PR C++/28450 * cp/init.c (build_zero_init): Handle VECTOR_TYPE and COMPLEX_TYPEs. 2006-10-06 Andrew Pinski <pinskia@physics.uc.edu> PR C++/28450 * g++.dg/ext/vector4.C: New test. * g++.dg/ext/complex1.C: New test. Added: branches/gcc-4_1-branch/gcc/testsuite/g++.dg/ext/complex1.C - copied unchanged from r116341, trunk/gcc/testsuite/g++.dg/ext/complex1.C branches/gcc-4_1-branch/gcc/testsuite/g++.dg/ext/vector4.C - copied unchanged from r116341, trunk/gcc/testsuite/g++.dg/ext/vector4.C Modified: branches/gcc-4_1-branch/gcc/cp/ChangeLog branches/gcc-4_1-branch/gcc/cp/init.c branches/gcc-4_1-branch/gcc/testsuite/ChangeLog
Fixed also on the 4.1 branch.
Subject: Bug 28450 Author: pinskia Date: Wed Oct 11 03:10:25 2006 New Revision: 117627 URL: http://gcc.gnu.org/viewcvs?root=gcc&view=rev&rev=117627 Log: 2006-10-10 Andrew Pinski <pinskia@physics.uc.edu> PR C++/28450 * cp/init.c (build_zero_init): Handle VECTOR_TYPE and COMPLEX_TYPEs. 2006-10-10 Andrew Pinski <pinskia@physics.uc.edu> PR C++/28450 * g++.dg/ext/vector4.C: New test. * g++.dg/ext/complex1.C: New test. Added: branches/gcc-4_0-branch/gcc/testsuite/g++.dg/ext/complex1.C - copied unchanged from r116341, trunk/gcc/testsuite/g++.dg/ext/complex1.C branches/gcc-4_0-branch/gcc/testsuite/g++.dg/ext/vector4.C - copied unchanged from r116341, trunk/gcc/testsuite/g++.dg/ext/vector4.C Modified: branches/gcc-4_0-branch/gcc/cp/ChangeLog branches/gcc-4_0-branch/gcc/cp/init.c branches/gcc-4_0-branch/gcc/testsuite/ChangeLog
Fixed.