The following code fragment fails on gcc i386 3.4.5-2, but works on 4.0.
Compilation terminates normally when field x is removed from structure
declaration S.
The fragment is simple enough, but I could not find an open bug description for
it.
struct S
{
char x;
unsigned char v[2];
};
static __thread struct S G1;
void test_local (int i)
{
(((unsigned char *) &G1.v)[i]) = ((unsigned char) 170U);
}
----------------------------------------------
$ uname -a
Linux 2.4.21-37.ELhugemem #1 SMP Sat Nov 26 12:13:22 EST 2005 i686 athlon i386
GNU/Linux
$ gcc -v
Reading specs from /usr/lib/gcc-lib/i386-redhat-linux/3.2.3/specs
Configured with: ../configure --prefix=/usr --mandir=/usr/share/man
--infodir=/usr/share/info --enable-shared --enable-threads=posix
--disable-checking --with-system-zlib --enable-__cxa_atexit
--host=i386-redhat-linux
Thread model: posix
gcc version 3.2.3 20030502 (Red Hat Linux 3.2.3-49)
$ gcc x.c
x.c: In function `test_local':
x.c:17: unrecognizable insn:
(insn 9 17 11 (set (reg/f:SI 59)
(const:SI (plus:SI (symbol_ref:SI ("%lG1"))
(const_int 1 [0x1])))) -1 (nil)
(expr_list:REG_EQUAL (const:SI (plus:SI (symbol_ref:SI ("%lG1"))
(const_int 1 [0x1])))
(nil)))
x.c:17: Internal compiler error in extract_insn, at recog.c:2149
Please submit a full bug report,
with preprocessed source if appropriate.
See <URL:http://bugzilla.redhat.com/bugzilla/> for instructions.
Preprocessed source stored into /tmp/cc6v1K6v.out file, please attach this to
your bugreport.
----------------------------------------------
$ uname -a
Linux 2.6.9-34.ELsmp #1 SMP Fri Feb 24 16:54:53 EST 2006 i686 athlon i386
GNU/Linux
$ gcc -v
Reading specs from /usr/lib/gcc/i386-redhat-linux/3.4.5/specs
Configured with: ../configure --prefix=/usr --mandir=/usr/share/man
--infodir=/usr/share/info --enable-shared --enable-threads=posix
--disable-checking --with-system-zlib --enable-__cxa_atexit
--disable-libunwind-exceptions --enable-java-awt=gtk --host=i386-redhat-linux
Thread model: posix
gcc version 3.4.5 20051201 (Red Hat 3.4.5-2)
$ gcc x.c
x.c: In function `test_local':
x.c:17: error: unrecognizable insn:
(insn 8 15 9 0 (set (reg/f:SI 59)
(const:SI (plus:SI (symbol_ref:SI ("G1") [flags 0x22] <var_decl
0xb7c69288 G1>)
(const_int 1 [0x1])))) -1 (nil)
(nil))
x.c:17: internal compiler error: in extract_insn, at recog.c:2083
Please submit a full bug report,
with preprocessed source if appropriate.
See <URL:http://bugzilla.redhat.com/bugzilla> for instructions.
The bug is not reproducible, so it is likely a hardware or OS problem.
--
Summary: use of thread local storage causes code generator to
fail
Product: gcc
Version: 3.4.5
Status: UNCONFIRMED
Severity: normal
Priority: P3
Component: c
AssignedTo: unassigned at gcc dot gnu dot org
ReportedBy: juulvanderspek at yahoo dot com
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=30067