[Bug driver/67301] New: Unable to compile program using extended assembly and asmSymbolicName

noloader at gmail dot com gcc-bugzilla@gcc.gnu.org
Fri Aug 21 04:44:00 GMT 2015


https://gcc.gnu.org/bugzilla/show_bug.cgi?id=67301

            Bug ID: 67301
           Summary: Unable to compile program using extended assembly and
                    asmSymbolicName
           Product: gcc
           Version: 4.9.3
            Status: UNCONFIRMED
          Severity: normal
          Priority: P3
         Component: driver
          Assignee: unassigned at gcc dot gnu.org
          Reporter: noloader at gmail dot com
  Target Milestone: ---

The following program:

  $ cat test.cxx
  int main(int argc, char* argv[])
  {
      __asm__ __volatile__ (

            "\t movl %[__ARGC], %%eax \n"
            :
            : __ARGC "" (argc)
      );

      return 0;
  }

Results in a failed compile:

  $ g++ test.cxx
  test.cxx: In function ‘int main(int, char**)’:
  test.cxx:7:5: error: expected string-literal before ‘__ARGC’
     : __ARGC "" (argc)
     ^
  test.cxx:7:5: error: expected ‘(’ before ‘__ARGC’
  test.cxx:7:5: error: ‘__ARGC’ was not declared in this scope
  test.cxx:7:12: error: expected ‘)’ before string constant
     : __ARGC "" (argc)
            ^
  test.cxx:7:12: error: expected ‘)’ before string constant

Above, I am trying to use GCC's extended ASM like Microsoft's MASM.

According to the online manual and Assembler Instructions with C Expression
Operands, § 6.44.3.1 Input Operands
(https://gcc.gnu.org/onlinedocs/gcc/Extended-Asm.html), asmSymbolicName is
being used correctly.

    Operands are separated by commas. Each operand has this format:

      [ [asmSymbolicName] ] constraint (cexpression)

    asmSymbolicName

        Specifies a symbolic name for the operand. Reference the name in the
      assembler template by enclosing it in square brackets (i.e. ‘%[Value]’).
      The scope of the name is the asm statement that contains the definition.
      Any valid C variable name is acceptable, including names already defined
      in the surrounding code.


More information about the Gcc-bugs mailing list