From: Zack Weinberg Date: Mon, 11 Sep 2000 05:44:51 +0000 (+0000) Subject: varasm.c (make_decl_rtl): Restore leading star on DECL_ASSEMBLER_NAME set for decls... X-Git-Tag: prereleases/libstdc++-2.92~4121 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=8f820299e3a349d39429bfe64bcbf22593369bf4;p=thirdparty%2Fgcc.git varasm.c (make_decl_rtl): Restore leading star on DECL_ASSEMBLER_NAME set for decls with an asmspec. * varasm.c (make_decl_rtl): Restore leading star on DECL_ASSEMBLER_NAME set for decls with an asmspec. * gcc.dg/asm-names.c: New test. From-SVN: r36309 --- diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 5f7a72a3ad38..f4164e545c66 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,8 @@ +2000-09-10 Zack Weinberg + + * varasm.c (make_decl_rtl): Restore leading star on + DECL_ASSEMBLER_NAME set for decls with an asmspec. + 2000-09-10 Zack Weinberg * c-pragma.c (handle_pragma_pack): Correct parsing logic so it diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 830af37eb631..73b488939caa 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,7 @@ +2000-09-10 Zack Weinberg + + * gcc.dg/asm-names.c: New test. + 2000-09-09 Kaveh R. Ghazi * gcc.dg/cpp/tr-warn6.c: New test diff --git a/gcc/testsuite/gcc.dg/asm-names.c b/gcc/testsuite/gcc.dg/asm-names.c new file mode 100644 index 000000000000..f02f08f31de9 --- /dev/null +++ b/gcc/testsuite/gcc.dg/asm-names.c @@ -0,0 +1,23 @@ +/* The name specified by an asm("...") suffix on a declaration is not + to have an underscore prefixed, even if normal symbols are. + Problem reported by Krister Walfridsson . */ + +/* { dg-do link } */ +/* { dg-options "-fleading-underscore" } */ + +extern void frobnicate (void) asm ("___frob14"); /* three underscores */ + +void __frob14 (void) {} /* two underscores */ + +int +main (void) +{ + frobnicate (); + return 0; +} + +/* In case built where the runtime expects no leading underscore on + main(). */ +extern int xmain (void) asm ("main"); + +int xmain (void) { return main(); } diff --git a/gcc/varasm.c b/gcc/varasm.c index 5a10d65687fd..af76b15560b9 100644 --- a/gcc/varasm.c +++ b/gcc/varasm.c @@ -710,8 +710,14 @@ make_decl_rtl (decl, asmspec, top_level) reg_number = decode_reg_name (asmspec); if (reg_number == -2) - /* ASMSPEC is given, and not the name of a register. */ - new_name = asmspec; + { + /* ASMSPEC is given, and not the name of a register. Mark the + name with a star so assemble_name won't munge it. */ + char *starred = alloca (strlen (asmspec) + 2); + starred[0] = '*'; + strcpy (starred + 1, asmspec); + new_name = starred; + } if (TREE_CODE (decl) != FUNCTION_DECL && DECL_REGISTER (decl)) {