[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