Bug 13302 - [3.3/3.4 Regression] Putting a va_list in a struct causes seg fault
Summary: [3.3/3.4 Regression] Putting a va_list in a struct causes seg fault
Status: RESOLVED FIXED
Alias: None
Product: gcc
Classification: Unclassified
Component: target (show other bugs)
Version: 3.4.0
: P2 normal
Target Milestone: 3.3.3
Assignee: Jorn Wolfgang Rennecke
URL:
Keywords: ice-on-valid-code
: 13303 (view as bug list)
Depends on:
Blocks:
 
Reported: 2003-12-04 13:33 UTC by stuart.menefy
Modified: 2004-01-17 04:22 UTC (History)
2 users (show)

See Also:
Host: i686-pc-linux-gnu
Target: sh4-linux-gnu
Build: i686-pc-linux-gnu
Known to work:
Known to fail:
Last reconfirmed: 2003-12-05 13:57:40


Attachments

Note You need to log in before you can comment on or make changes to this bug.
Description stuart.menefy 2003-12-04 13:33:53 UTC
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;
};
Comment 1 Wolfgang Bangerth 2003-12-04 15:13:11 UTC
*** Bug 13303 has been marked as a duplicate of this bug. ***
Comment 2 Wolfgang Bangerth 2003-12-04 15:15:20 UTC
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. 
Comment 3 Andrew Pinski 2003-12-04 16:44:41 UTC
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.
Comment 4 stuart.menefy 2003-12-04 19:20:03 UTC
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?
Comment 5 Andrew Pinski 2003-12-04 19:45:43 UTC
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?
Comment 6 CVS Commits 2003-12-05 15:48:41 UTC
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

Comment 7 CVS Commits 2003-12-05 15:56:42 UTC
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

Comment 8 Jorn Wolfgang Rennecke 2003-12-05 15:58:18 UTC
Applied patch to mainline and to 3.3 branch.