This is GCC Bugzilla
This is GCC Bugzilla Version 2.20+
View Bug Activity | Format For Printing | Clone This Bug
gcc 4.3.1 gets an ICE on the program below. I didn't try 4.3.2 or 4.4.0. $ cat t.C && gcc t.C #include <stdarg.h> #include <string.h> const char* foobar (void*) { return 0; } 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 () { va_list va; memset (&va, 0, sizeof va); S<va_list>::foo (); } t.C: In static member function 'static const char* S<T [N]>::foo() [with T = __va_list_tag, int N = 1]': t.C:14: instantiated from here t.C:8: internal compiler error: in build_special_member_call, at cp/call.c:5325 Please submit a full bug report, with preprocessed source if appropriate. See <http://gcc.gnu.org/bugs.html> for instructions.
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