[Bug c/20359] New: Incorrect code with global register variables
simonmar at microsoft dot com
gcc-bugzilla@gcc.gnu.org
Mon Mar 7 11:45:00 GMT 2005
Global register variables rear their ugly head again. Here's a simple test case
that generates incorrect code on x86_64 with gcc 3.4.2:
$ cat bug.c
register void * R1 __asm__("%r13");
extern void g(void);
static void f(void) {
R1 = g;
goto *R1;
}
$ gcc -v
Reading specs from /usr/lib/gcc-lib/i386-redhat-linux/3.2.2/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.2 20030222 (Red Hat Linux 3.2.2-5)
$ gcc -O -S bug.c
The generated code for function f is:
f:
.LFB2:
movl $g, %eax
jmp *%rax
Note the assignment to the global register variable R1 has been lost.
This is breaking the Glasgow Haskell Compiler (http://www.haskell.org/ghc/) on
the x86_64 platform. It might be related to the (closed) bug #7871.
--
Summary: Incorrect code with global register variables
Product: gcc
Version: 3.4.2
Status: UNCONFIRMED
Severity: normal
Priority: P2
Component: c
AssignedTo: unassigned at gcc dot gnu dot org
ReportedBy: simonmar at microsoft dot com
CC: gcc-bugs at gcc dot gnu dot org
GCC build triplet: x86_64-*-linux
GCC host triplet: x86_64-*-linux
GCC target triplet: x86_64-*-linux
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=20359
More information about the Gcc-bugs
mailing list