c-decl.c (finish_decl): When setting the DECL_ASSEMBLER_NAME of a function using...
authorJ"orn Rennecke <joern.rennecke@superh.com>
Mon, 19 May 2003 16:41:47 +0000 (16:41 +0000)
committerJoern Rennecke <amylaar@gcc.gnu.org>
Mon, 19 May 2003 16:41:47 +0000 (17:41 +0100)
* c-decl.c (finish_decl): When setting the DECL_ASSEMBLER_NAME
of a function using ASMSPEC, prepend a star.

From-SVN: r66965

gcc/ChangeLog
gcc/c-decl.c

index 066c27330f25d216998d6656b1ad009efc595400..484a2d84bf49ef71d47b4f2003f32b1dbba124a0 100644 (file)
@@ -1,3 +1,8 @@
+2003-05-19  J"orn Rennecke <joern.rennecke@superh.com>
+
+       * c-decl.c (finish_decl): When setting the DECL_ASSEMBLER_NAME
+       of a function using ASMSPEC, prepend a star.
+
 2003-05-19  Jason Merrill  <jason@redhat.com>
 
        * tree-inline.c (copy_body_r): Avoid generating &* during inline
index 28ba6431767b5d33e85842f3aab8464620fa67e3..f6e6f5b52a77cb97e724df77d6962c1ca345b0d0 100644 (file)
@@ -2874,25 +2874,31 @@ finish_decl (decl, init, asmspec_tree)
      was a normal built-in.  */
   if (TREE_CODE (decl) == FUNCTION_DECL && 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);
+
       if (DECL_BUILT_IN_CLASS (decl) == BUILT_IN_NORMAL)
        {
          tree builtin = built_in_decls [DECL_FUNCTION_CODE (decl)];
          SET_DECL_RTL (builtin, NULL_RTX);
-         SET_DECL_ASSEMBLER_NAME (builtin, get_identifier (asmspec));
+         SET_DECL_ASSEMBLER_NAME (builtin, get_identifier (starred));
 #ifdef TARGET_MEM_FUNCTIONS
          if (DECL_FUNCTION_CODE (decl) == BUILT_IN_MEMCPY)
-           init_block_move_fn (asmspec);
+           init_block_move_fn (starred);
          else if (DECL_FUNCTION_CODE (decl) == BUILT_IN_MEMSET)
-           init_block_clear_fn (asmspec);
+           init_block_clear_fn (starred);
 #else
          if (DECL_FUNCTION_CODE (decl) == BUILT_IN_BCOPY)
-           init_block_move_fn (asmspec);
+           init_block_move_fn (starred);
          else if (DECL_FUNCTION_CODE (decl) == BUILT_IN_BZERO)
-           init_block_clear_fn (asmspec);
+           init_block_clear_fn (starred);
 #endif
        }
       SET_DECL_RTL (decl, NULL_RTX);
-      SET_DECL_ASSEMBLER_NAME (decl, get_identifier (asmspec));
+      SET_DECL_ASSEMBLER_NAME (decl, get_identifier (starred));
     }
 
   /* Output the assembler code and/or RTL code for variables and functions,