On 5/9/26 13:34, Sam James wrote:
Jonathan Yong <[email protected]> writes:

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.

Just 16, as older branches don't have other fixes for that bug.

Pushed to master and releases/gcc-16 branches.

Reply via email to