[Bug inline-asm/65640] multiple alternative constraints and earlyclobbers
egallager at gcc dot gnu.org
gcc-bugzilla@gcc.gnu.org
Tue Jul 31 04:36:00 GMT 2018
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=65640
--- Comment #2 from Eric Gallager <egallager at gcc dot gnu.org> ---
(In reply to Eric Gallager from comment #1)
> (In reply to Mike Herrick from comment #0)
> > 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?
>
> Confirmed that I get errors in the same places as you; I'm not sure exactly
> what the expected behavior is though. Maybe someone else can answer.
Any ideas on who else could answer? There's no "inline-asm" maintainer listed
in the MAINTAINERS file...
More information about the Gcc-bugs
mailing list