On 5/9/26 02:35, LIU Hao wrote:
Previously, this code

    extern int shl;
    int get_shl(void) { return shl; }

gave errors like

    $ x86_64-w64-mingw32-gcc -masm=intel test.c
    ccUSyr0f.s: Assembler messages:
    ccUSyr0f.s:24: Error: invalid use of operator "shl"

because it contained

    .refptr.shl:
        .quad   shl

This `shl` should have referenced the symbol, but it appeared in an expression context, where, in Intel syntax, it got interpreted as the shift-left operator.

This commit fixes the issue by emitting the target symbol with
`ASM_OUTPUT_LABELREF`, which will quote it properly with regard to the output
assembler syntax.

     PR target/53929

gcc/ChangeLog:

     * config/mingw/winnt.cc (mingw_pe_file_end): Use `ASM_OUTPUT_LABELREF`
     to emit `name`.

Signed-off-by: LIU Hao <[email protected]>

---
  gcc/config/mingw/winnt.cc | 4 +++-
  1 file changed, 3 insertions(+), 1 deletion(-)

diff --git a/gcc/config/mingw/winnt.cc b/gcc/config/mingw/winnt.cc
index e926b25cf98a..c73aa15ad37e 100644
--- a/gcc/config/mingw/winnt.cc
+++ b/gcc/config/mingw/winnt.cc
@@ -860,7 +860,9 @@ mingw_pe_file_end (void)
                 "\t.p2align\t3, 0\n"
                   "\t.globl\t%s\n"
                 "\t.linkonce\tdiscard\n", oname, oname);
-      fprintf (asm_out_file, "%s:\n\t.quad\t%s\n", oname, name);
+      fprintf (asm_out_file, "%s:\n\t.quad\t", oname);
+      ASM_OUTPUT_LABELREF (asm_out_file, name);
+      fputc ('\n', asm_out_file);
      }
      }
  }

Patch looks OK, will push to master branch and other active release branches if there are no objections.

Reply via email to