This is the mail archive of the
gcc-bugs@gcc.gnu.org
mailing list for the GCC project.
Re: comptypes() segfaults
I just filed a gnats report on above subject, but I should have
mentioned that the code in question compiled fine on EGCS 1.x, GCC
2.95.x, and RedHat 2.96 on a variety of architectures.
robertlipe@usa.net wrote:
>
> >Submitter-Id: net
> >Originator: Robert Lipe
> >Organization:
> >Confidential: no
> >Synopsis: comptypes() segfaults
> >Severity: critical
> >Priority: medium
> >Category: c
> >Class: ice-on-legal-code
> >Release: 3.0.1 20010806 (prerelease)
> >Environment:
> System: Linux rjlinux 2.4.2-2 #1 Sun Apr 8 20:41:30 EDT 2001 i686 unknown
> Architecture: i686
>
>
> host: i686-pc-linux-gnu
> build: i686-pc-linux-gnu
> target: i686-pc-linux-gnu
> configured with: /play/egcs/configure --enable-languages=c --prefix=/usr/local/gcc3
> >Description:
>
> The following (admittedly horrifying) code will ICE gcc for IA32 as of today
> and a slightly-before-3.0 version for IA64 Linux in the same way.
>
>
> Program received signal SIGSEGV, Segmentation fault.
> 0x0805873c in comptypes (type1=0x401b9a28, type2=0x401b98f0)
> at /play/egcs/gcc/c-typeck.c:519
> 519 if (d1 == 0 || d2 == 0 || d1 == d2
>
> Here's the source:
>
>
> typedef struct { volatile int counter; } atomic_t;
> typedef struct _udi_osdep_atomic_int_opaque {
> unsigned long PADDINGTOP[0];
> atomic_t val;
> unsigned long PADDINGBOT[0];
> } udi_osdep_atomic_int_opaque_t;
> typedef struct _udi_osdep_event_opaque
> {
> unsigned long PADDINGTOP[0];
> volatile int signaled;
> volatile int destroyed;
> volatile int waiting;
> volatile int waiter_busy;
> volatile int waiter_waiting;
> unsigned long PADDINGBOT[0];
> } udi_osdep_event_opaque_t;
> extern struct _udi_osdep_atomic_int_opaque _udi_osdep_atomic_int_opaque; struct
> _udi_osdep_atomic_int_opaque _udi_osdep_atomic_int_opaque ; struct
> _udi_osdep_atomic_int_opaque__opaque { unsigned long TOP_PAD[0]; char opaque[
> sizeof(struct _udi_osdep_atomic_int_opaque) ]; unsigned long END_PAD[0]; };
> extern struct _udi_osdep_atomic_int_opaque__opaque
> _udi_osdep_atomic_int_opaque__opaque_var; struct
> _udi_osdep_atomic_int_opaque__opaque _udi_osdep_atomic_int_opaque__opaque_var
> ;extern short _udi_osdep_atomic_int_opaque__is_invalid; short
> _udi_osdep_atomic_int_opaque__is_invalid = sizeof(_udi_osdep_atomic_int_opaque)
> - sizeof(_udi_osdep_atomic_int_opaque__opaque_var); extern char
> _udi_osdep_atomic_int_opaque__IS_INVALID[((sizeof(_udi_osdep_atomic_int_opaque))
> > (sizeof(_udi_osdep_atomic_int_opaque__opaque_var)) ?
> ((sizeof(_udi_osdep_atomic_int_opaque)) -
> (sizeof(_udi_osdep_atomic_int_opaque__opaque_var))) :
> ((sizeof(_udi_osdep_atomic_int_opaque__opaque_var)) -
> (sizeof(_udi_osdep_atomic_int_opaque))))]; char
> _udi_osdep_atomic_int_opaque__IS_INVALID[((sizeof(_udi_osdep_atomic_int_opaque))
> > (sizeof(_udi_osdep_atomic_int_opaque__opaque_var)) ?
> ((sizeof(_udi_osdep_atomic_int_opaque)) -
> (sizeof(_udi_osdep_atomic_int_opaque__opaque_var))) :
> ((sizeof(_udi_osdep_atomic_int_opaque__opaque_var)) -
> (sizeof(_udi_osdep_atomic_int_opaque))))];
>
>
> >How-To-Repeat:
> Simply cut/paste the above and attempt to compile.
> $ /usr/local/gcc3/bin/gcc a.c
> a.c:38: Internal error: Segmentation fault
> >Fix:
>