From: Volker Reichelt Date: Mon, 15 Feb 2010 04:01:10 +0000 (+0000) Subject: re PR c++/43024 (ICE on template code with -O2 or -O3, regression from 4.4.2) X-Git-Tag: releases/gcc-4.5.0~779 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=9b48e39ccc3bfcc875f9d47b865e20cd37f54ace;p=thirdparty%2Fgcc.git re PR c++/43024 (ICE on template code with -O2 or -O3, regression from 4.4.2) PR c++/43024 * g++.dg/opt/ice1.C: New. From-SVN: r156766 --- diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 891e33d5e5a7..4ad1e6742764 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2010-02-14 Volker Reichelt + + PR c++/43024 + * g++.dg/opt/ice1.C: New. + 2010-02-14 Jason Merrill PR c++/41997 diff --git a/gcc/testsuite/g++.dg/opt/ice1.C b/gcc/testsuite/g++.dg/opt/ice1.C new file mode 100644 index 000000000000..701897166f51 --- /dev/null +++ b/gcc/testsuite/g++.dg/opt/ice1.C @@ -0,0 +1,41 @@ +// PR c++/43024 +// { dg-options "-O2" } + +void foo(); + +template struct X +{ + enum { e }; + typedef int Y; +}; + +template struct A +{ + ~A() { foo(); } + A() { a<0>(0); } + template void a(typename X::e>::Y); + struct B b(); +}; + +struct B +{ + A<> b0, b1, b2, b3; + B operator+ (const B&); +}; + +struct C +{ + A<> c0, c1, c2, c3, c4, c5, c6, c7, c8; +}; + +inline void bar(int i) +{ + A<> a0, a1; + if (i) a0.b() + a0.b() + a0.b() + a0.b(); +} + +void baz() +{ + C c; + bar(0); +}