This is the mail archive of the
gcc-bugs@gcc.gnu.org
mailing list for the GCC project.
[Bug inline-asm/32971] New: Inline asm with offset addressing fails to compile in 4.0+ without -O
- From: "kinetik at orcon dot net dot nz" <gcc-bugzilla at gcc dot gnu dot org>
- To: gcc-bugs at gcc dot gnu dot org
- Date: 3 Aug 2007 04:47:05 -0000
- Subject: [Bug inline-asm/32971] New: Inline asm with offset addressing fails to compile in 4.0+ without -O
- Reply-to: gcc-bugzilla at gcc dot gnu dot org
The following test case fails to compile without optimization with gcc 4.3.0
(20070503 (experimental)), 4.1.2 (20070502 (Red Hat 4.1.2-12)), and 4.0.4
(20060904 (prerelease) (Debian 4.0.3-7)), but succeeds with 3.3.6 (Debian
1:3.3.6-15) and 3.4.6 (Debian 3.4.6-5). With optimization (-O and -O2), it
compiles fine with all of the gcc versions mentioned above.
The failing configurations are generating invalid assembly and gas emits the
following error:
/tmp/ccnbmIy1.s:12: Error: register value used as expression
Looking at the assembly emitted by gcc, the failing case looks like:
lea (%edx)(%eax), %eax
..and with the working configurations, I get the expected code:
lea 4(%eax), %eax
#include <stddef.h>
struct coord { int x; int y; };
int *
foo(struct coord * c)
{
int * i;
asm ("lea %1(%2), %0"
: "=r" (i)
: "m" (*(size_t *) offsetof(struct coord, y)),
"r" (c)
: "memory");
return i;
}
--
Summary: Inline asm with offset addressing fails to compile in
4.0+ without -O
Product: gcc
Version: 4.3.0
Status: UNCONFIRMED
Severity: normal
Priority: P3
Component: inline-asm
AssignedTo: unassigned at gcc dot gnu dot org
ReportedBy: kinetik at orcon dot net dot nz
GCC build triplet: i486-linux-gnu
GCC host triplet: i486-linux-gnu
GCC target triplet: i486-linux-gnu
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=32971