This is the mail archive of the gcc-bugs@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

[Bug inline-asm/65640] multiple alternative constraints and earlyclobbers


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.

Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]