------- Comment #1 from pinskia at gcc dot gnu dot org 2008-09-07 00:34 ------- This only ICEs on targets where va_list is an array. Reduced testcase: typedef __builtin_va_list __gnuc_va_list; typedef __gnuc_va_list va_list; template <class> struct S { static const char* foo () { return 0; } }; template <class T, int N> struct S<T [N]> { static const char* foo () { return foobar (T ()); } }; int main () { S<va_list>::foo (); }
--- CUT --- It does not ICE for powerpc64-linux-gnu but does for spu-elf and powerpc-linux-gnu. With 4.1.1, I get the following error message: t.cc: In static member function static const char* S<T [N]>::foo() [with T = __va_list_tag, int N = 1]: t.cc:6: instantiated from here t.cc:4: error: invalid cast from type int to type __va_list_tag Also Note I don't think this is valid code. If we change the template to: struct S<T [N]> { static const char* foo () { return new T (); } }; I get an ICE even with 4.1.1: t.cc: In static member function static const char* S<T [N]>::foo() [with T = __va_list_tag, int N = 1]: t.cc:6: instantiated from here t.cc:4: internal compiler error: in build_zero_init, at cp/init.c:260 -- pinskia at gcc dot gnu dot org changed: What |Removed |Added ---------------------------------------------------------------------------- Status|UNCONFIRMED |NEW Ever Confirmed|0 |1 GCC target triplet| |x86_64-*-*, powerpc-linux- | |gnu, spu-elf Keywords| |ice-on-valid-code Last reconfirmed|0000-00-00 00:00:00 |2008-09-07 00:34:18 date| | http://gcc.gnu.org/bugzilla/show_bug.cgi?id=37404