This is the mail archive of the
gcc-bugs@gcc.gnu.org
mailing list for the GCC project.
[Bug inline-asm/65640] multiple alternative constraints and earlyclobbers
- From: "egallager at gcc dot gnu.org" <gcc-bugzilla at gcc dot gnu dot org>
- To: gcc-bugs at gcc dot gnu dot org
- Date: Fri, 28 Jul 2017 15:52:00 +0000
- Subject: [Bug inline-asm/65640] multiple alternative constraints and earlyclobbers
- Auto-submitted: auto-generated
- References: <bug-65640-4@http.gcc.gnu.org/bugzilla/>
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=65640
Eric Gallager <egallager at gcc dot gnu.org> changed:
What |Removed |Added
----------------------------------------------------------------------------
Status|UNCONFIRMED |NEW
Last reconfirmed| |2017-07-28
CC| |egallager at gcc dot gnu.org
Ever confirmed|0 |1
--- Comment #1 from Eric Gallager <egallager at gcc dot gnu.org> ---
(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.