This problem was found when building mozilla. Creating a struct which contains a va_list element (which is actually a __builtin_va_list) causes the C++ compiler to seg fault. The problems is not seen when using the C compiler or compiling for sh3 (only sh4). It is preset in gcc 3.0.3, 3.2.1, 3.3.2 and 3.4 snapshot 20030222. I suspect it was not present in gcc 2.95, but cannot confirm this. To reproduce: % /var/tmp/gcc-3.4-20031126/objdir/gcc/xgcc -B/var/tmp/gcc-3.4-20031126/objdir/gcc/ -O0 nsTextFormatter.ii -m4 -c nsTextFormatter.ii:4: internal compiler error: Segmentation fault Please submit a full bug report, with preprocessed source if appropriate. See <URL:http://gcc.gnu.org/bugs.html> for instructions. % cat nsTextFormatter.ii typedef __builtin_va_list __gnuc_va_list; typedef __gnuc_va_list va_list; struct NumArgState{ va_list ap; };
*** Bug 13303 has been marked as a duplicate of this bug. ***
I can't reproduce this with a more recent snapshot on x86 linux. Can you a) use with a recent CVS snapshot? b) say something whether this is sh specific, i.e. does it not crash on x86 for you? W.
I cannot reproduce it on powerpc-apple-darwin so it is a target bug, will look into to see if I can reproduce it on a cross to sh later today.
I know next to nothing about the guts of gcc, but sh_build_va_list (gcc/config/sh/sh.c) calls make_node() whereas the other archs call *lang_hooks.types.make_type(). Could this be relevant?
Yes that would be a problem, so this is definitely a target bug. The fix to most of the other targets were changed by: <http://gcc.gnu.org/ml/gcc-patches/2002-03/msg01864.html> Neil did you forgot some targets when you were doing this change?
Subject: Bug 13302 CVSROOT: /cvs/gcc Module name: gcc Changes by: amylaar@gcc.gnu.org 2003-12-05 15:48:37 Modified files: gcc : ChangeLog gcc/config/sh : sh.c gcc/testsuite : ChangeLog Added files: gcc/testsuite/g++.dg/other: struct-va_list.C Log message: 2003-12-05 Stuart Menefy <stuart.menefy@st.com> J"orn Rennecke <joern.rennecke@superh.com> PR target/13302 gcc: * sh.c (sh_build_builtin_va_list): Use (*lang_hooks.types.make_type). testsuite: * g++.dg/other/struct-va_list.C: New test. Patches: http://gcc.gnu.org/cgi-bin/cvsweb.cgi/gcc/gcc/ChangeLog.diff?cvsroot=gcc&r1=2.1929&r2=2.1930 http://gcc.gnu.org/cgi-bin/cvsweb.cgi/gcc/gcc/config/sh/sh.c.diff?cvsroot=gcc&r1=1.240&r2=1.241 http://gcc.gnu.org/cgi-bin/cvsweb.cgi/gcc/gcc/testsuite/ChangeLog.diff?cvsroot=gcc&r1=1.3231&r2=1.3232 http://gcc.gnu.org/cgi-bin/cvsweb.cgi/gcc/gcc/testsuite/g++.dg/other/struct-va_list.C.diff?cvsroot=gcc&r1=NONE&r2=1.1
Subject: Bug 13302 CVSROOT: /cvs/gcc Module name: gcc Branch: gcc-3_3-branch Changes by: amylaar@gcc.gnu.org 2003-12-05 15:56:37 Modified files: gcc : ChangeLog gcc/config/sh : sh.c gcc/testsuite : ChangeLog Added files: gcc/testsuite/g++.dg/other: struct-va_list.C Log message: 2003-12-05 Stuart Menefy <stuart.menefy@st.com> J"orn Rennecke <joern.rennecke@superh.com> PR target/13302 gcc: * sh.c (sh_build_builtin_va_list): Use (*lang_hooks.types.make_type). testsuite: * g++.dg/other/struct-va_list.C: New test. Patches: http://gcc.gnu.org/cgi-bin/cvsweb.cgi/gcc/gcc/ChangeLog.diff?cvsroot=gcc&only_with_tag=gcc-3_3-branch&r1=1.16114.2.827&r2=1.16114.2.828 http://gcc.gnu.org/cgi-bin/cvsweb.cgi/gcc/gcc/config/sh/sh.c.diff?cvsroot=gcc&only_with_tag=gcc-3_3-branch&r1=1.188.2.6&r2=1.188.2.7 http://gcc.gnu.org/cgi-bin/cvsweb.cgi/gcc/gcc/testsuite/ChangeLog.diff?cvsroot=gcc&only_with_tag=gcc-3_3-branch&r1=1.2261.2.323&r2=1.2261.2.324 http://gcc.gnu.org/cgi-bin/cvsweb.cgi/gcc/gcc/testsuite/g++.dg/other/struct-va_list.C.diff?cvsroot=gcc&only_with_tag=gcc-3_3-branch&r1=NONE&r2=1.1.2.1
Applied patch to mainline and to 3.3 branch.