Test case (courtesy creduce-2.0.1): /// --- cut --- template <typename> struct vector { vector() { } }; typedef vector<int> Arrays[1]; class C { vector<int> v_; void Foo(const Arrays &); }; Arrays a; /// --- cut --- GCC-4.7 before r194286 (PR55032) was merged: g++ -S pp.ii -o pp-good.s c++filt < pp-good.s | grep call call vector<int>::vector() call __static_initialization_and_destruction_0(int, int) Current trunk: cat pp-bad.7765.s .file "pp.ii" .globl a .bss .type a, @object .size a, 1 a: .zero 1 .ident "GCC: (GNU) 4.8.0 20121222 (experimental)" .section .note.GNU-stack,"",@progbits
Re-confirmed with today's trunk (r194713).
Confirmed, here is a run-time testcase: int t = 0; template <typename> struct vector { vector() { t++; } }; typedef vector<int> Arrays[1]; class C { vector<int> v_; void Foo(const Arrays &); }; Arrays a; int main(void) { if (t!=1) __builtin_abort (); return 0; }
Author: jason Date: Wed Jan 2 19:03:04 2013 New Revision: 194811 URL: http://gcc.gnu.org/viewcvs?root=gcc&view=rev&rev=194811 Log: PR c++/55804 PR c++/55032 PR c++/55245 * tree.c (build_array_type_1): Revert earlier change. * cp/tree.c (build_cplus_array_type): Copy layout information to main variant if necessary. Added: trunk/gcc/testsuite/g++.dg/init/array33.C Modified: trunk/gcc/ChangeLog trunk/gcc/cp/ChangeLog trunk/gcc/cp/tree.c trunk/gcc/tree.c
Author: jason Date: Wed Jan 2 19:03:37 2013 New Revision: 194812 URL: http://gcc.gnu.org/viewcvs?root=gcc&view=rev&rev=194812 Log: PR c++/55804 PR c++/55032 PR c++/55245 * tree.c (build_array_type_1): Revert earlier change. * cp/tree.c (build_cplus_array_type): Copy layout information to main variant if necessary. Added: branches/gcc-4_7-branch/gcc/testsuite/g++.dg/init/array33.C Modified: branches/gcc-4_7-branch/gcc/ChangeLog branches/gcc-4_7-branch/gcc/cp/ChangeLog branches/gcc-4_7-branch/gcc/cp/tree.c branches/gcc-4_7-branch/gcc/tree.c
Author: jason Date: Wed Jan 2 19:03:46 2013 New Revision: 194813 URL: http://gcc.gnu.org/viewcvs?root=gcc&view=rev&rev=194813 Log: PR c++/55804 PR c++/55032 PR c++/55245 * tree.c (build_array_type_1): Revert earlier change. * cp/tree.c (build_cplus_array_type): Copy layout information to main variant if necessary. Added: branches/gcc-4_6-branch/gcc/testsuite/g++.dg/init/array33.C Modified: branches/gcc-4_6-branch/gcc/ChangeLog branches/gcc-4_6-branch/gcc/cp/ChangeLog branches/gcc-4_6-branch/gcc/cp/tree.c branches/gcc-4_6-branch/gcc/tree.c
Fixed.