tree.c (decl_assembler_name_equal): Expect assembler name of decl to be mangled too.
authorJan Hubicka <jh@suse.cz>
Sun, 13 Jul 2008 20:55:47 +0000 (22:55 +0200)
committerJan Hubicka <hubicka@gcc.gnu.org>
Sun, 13 Jul 2008 20:55:47 +0000 (20:55 +0000)
* tree.c (decl_assembler_name_equal): Expect assembler name of decl
to be mangled too.

From-SVN: r137756

gcc/ChangeLog
gcc/tree.c

index 7bc3702b329bbc08ac457ac3588e38aee235e63a..4a98d096ee4283aa1124037d9c8bd1b1d1b235ba 100644 (file)
@@ -1,3 +1,8 @@
+2008-07-13  Jan Hubicka  <jh@suse.cz>
+
+       * tree.c (decl_assembler_name_equal): Expect assembler name of decl
+       to be mangled too.
+
 2008-07-13  Richard Guenther  <rguenther@suse.de>
 
        PR middle-end/36811
index 81c471b706731e79edabd5093ad982d8d14c30c4..0bb9fd9367f822d6c78ed2f1a1d068fb24a58d21 100644 (file)
@@ -350,32 +350,53 @@ bool
 decl_assembler_name_equal (tree decl, const_tree asmname)
 {
   tree decl_asmname = DECL_ASSEMBLER_NAME (decl);
+  const char *decl_str;
+  const char *asmname_str;
+  bool test = false;
 
   if (decl_asmname == asmname)
     return true;
 
+  decl_str = IDENTIFIER_POINTER (decl_asmname);
+  asmname_str = IDENTIFIER_POINTER (asmname);
+  
+
   /* If the target assembler name was set by the user, things are trickier.
      We have a leading '*' to begin with.  After that, it's arguable what
      is the correct thing to do with -fleading-underscore.  Arguably, we've
      historically been doing the wrong thing in assemble_alias by always
      printing the leading underscore.  Since we're not changing that, make
      sure user_label_prefix follows the '*' before matching.  */
-  if (IDENTIFIER_POINTER (decl_asmname)[0] == '*')
+  if (decl_str[0] == '*')
     {
-      const char *decl_str = IDENTIFIER_POINTER (decl_asmname) + 1;
       size_t ulp_len = strlen (user_label_prefix);
 
+      decl_str ++;
+
       if (ulp_len == 0)
-       ;
+       test = true;
       else if (strncmp (decl_str, user_label_prefix, ulp_len) == 0)
-       decl_str += ulp_len;
+       decl_str += ulp_len, test=true;
       else
-       return false;
+       decl_str --;
+    }
+  if (asmname_str[0] == '*')
+    {
+      size_t ulp_len = strlen (user_label_prefix);
 
-      return strcmp (decl_str, IDENTIFIER_POINTER (asmname)) == 0;
+      asmname_str ++;
+
+      if (ulp_len == 0)
+       test = true;
+      else if (strncmp (asmname_str, user_label_prefix, ulp_len) == 0)
+       asmname_str += ulp_len, test=true;
+      else
+       asmname_str --;
     }
 
-  return false;
+  if (!test)
+    return false;
+  return strcmp (decl_str, asmname_str) == 0;
 }
 
 /* Hash asmnames ignoring the user specified marks.  */