http://gcc.gnu.org/bugzilla/show_bug.cgi?id=55681



             Bug #: 55681

           Summary: Qualifiers on asm statements are order-dependent

    Classification: Unclassified

           Product: gcc

           Version: 4.8.0

            Status: UNCONFIRMED

          Severity: normal

          Priority: P3

         Component: c

        AssignedTo: unassig...@gcc.gnu.org

        ReportedBy: josh.m.con...@gmail.com





The syntax that is accepted for asm statement qualifiers is:



  asm {volatile | const | restrict} {goto}



(this can easily be seen by looking at the code in c_parser_asm_statement).



This means, for example, that gcc isn't particularly orthogonal in what it

chooses to accept and reject:



  asm volatile ("nop");                      // accepted

  asm const ("nop");                         // accepted with warning

  asm __restrict ("nop");                    // accepted with warning

  asm const volatile ("nop");                // parse error

  asm const __restrict ("nop");              // parse error

  asm volatile goto ("nop" : : : : label);   // accepted

  asm goto volatile ("nop" : : : : label);   // parse error



This is probably rarely a problem, since most of the statements that would

result in an error are not likely to be seen (I came across this when adding a

new qualifier for our local port, which exacerbated the problem), but I thought

I would mention it anyway -- the fix is relatively straightforward since the

qualifiers are independent.

Reply via email to