OSDN Git Service

* c-decl.c (finish_decl): When setting the DECL_ASSEMBLER_NAME
authoramylaar <amylaar@138bc75d-0d04-0410-961f-82ee72b054a4>
Mon, 19 May 2003 16:41:47 +0000 (16:41 +0000)
committeramylaar <amylaar@138bc75d-0d04-0410-961f-82ee72b054a4>
Mon, 19 May 2003 16:41:47 +0000 (16:41 +0000)
of a function using ASMSPEC, prepend a star.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@66965 138bc75d-0d04-0410-961f-82ee72b054a4

gcc/ChangeLog
gcc/c-decl.c

index 066c273..484a2d8 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 28ba643..f6e6f5b 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,