Bug List: (This bug is not in your last search results)   Show last search results      Search page      Enter new bug
Bug#: 37404
Product:  
Component:  
Status: NEW
Resolution:
Assigned To: Not yet assigned to anyone <unassigned@gcc.gnu.org>
Host:
Reported against  
Priority:  
Severity:  
Target Milestone:  
 
 
Target:
Reporter: Martin Sebor <msebor@gmail.com>
Add CC:
CC:
Remove selected CCs
Build:
URL:
Summary:
Keywords:
Known to work:
Known to fail:

Attachment Description Type Created Size Actions
Create a New Attachment (proposed patch, testcase, etc.) View All

Bug 37404 depends on: Show dependency tree
Show dependency graph
Bug 37404 blocks:

Additional Comments:





Mark bug as waiting for feedback
Mark bug as suspended




View Bug Activity   |   Format For Printing   |   Clone This Bug


Description:   Last confirmed: 2008-09-07 00:34 Opened: 2008-09-06 23:58
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.

------- Comment #1 From Andrew Pinski 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

Bug List: (This bug is not in your last search results)   Show last search results      Search page      Enter new bug