[Bug inline-asm/65640] New: multiple alternative constraints and earlyclobbers
mjh at edg dot com
gcc-bugzilla@gcc.gnu.org
Tue Mar 31 14:19:00 GMT 2015
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=65640
Bug ID: 65640
Summary: multiple alternative constraints and earlyclobbers
Product: gcc
Version: 4.9.2
Status: UNCONFIRMED
Severity: normal
Priority: P3
Component: inline-asm
Assignee: unassigned at gcc dot gnu.org
Reporter: mjh at edg dot com
There seems to be an issue with earlyclobbers and multiple alternative
constraints. Take this example:
int f(int out, int in) {
asm("foo %1,%0;" : "=&a" (out) : "b" (in)); // Okay
asm("foo %1,%0;" : "=&b" (out) : "b" (in)); // Expected error
asm("foo %1,%0;" : "=&a" (out) : "a" (in)); // Expected error
asm("foo %1,%0;" : "=&a,&b" (out) : "b,b" (in)); // Okay
asm("foo %1,%0;" : "=&a,&b" (out) : "a,a" (in)); // Unexpected error
asm("foo %1,%0;" : "=&b,&a" (out) : "b,b" (in)); // Okay
asm("foo %1,%0;" : "=&b,&a" (out) : "a,a" (in)); // Okay
return out;
}
With 4.9.2, I see three errors:
$ g++492 -S ex.c
ex.c: In function 'int f(int, int)':
ex.c:3:47: error: 'asm' operand has impossible constraints
asm("foo %1,%0;" : "=&b" (out) : "b" (in)); // Expected error
^
ex.c:4:47: error: 'asm' operand has impossible constraints
asm("foo %1,%0;" : "=&a" (out) : "a" (in)); // Expected error
^
ex.c:6:52: error: 'asm' operand has impossible constraints
asm("foo %1,%0;" : "=&a,&b" (out) : "a,a" (in)); // Unexpected error
^
The first two are expected, but I'm at a loss to explain the third error. In
all four of the multi alternative constrain cases, there is exactly one "good"
constraint and one "bad" constraint in the pair, yet only one of the four cases
is diagnosed.
What is the expected behavior for this case?
More information about the Gcc-bugs
mailing list