c-pragma.c (maybe_apply_pragma_weak): Don't get DECL_ASSEMBLER_NAME when it's not...
authorGeoffrey Keating <geoffk@apple.com>
Mon, 21 Jul 2003 20:53:07 +0000 (20:53 +0000)
committerGeoffrey Keating <geoffk@gcc.gnu.org>
Mon, 21 Jul 2003 20:53:07 +0000 (20:53 +0000)
* c-pragma.c (maybe_apply_pragma_weak): Don't get DECL_ASSEMBLER_NAME
when it's not needed.

From-SVN: r69646

gcc/ChangeLog
gcc/c-pragma.c

index cd57ee3ab5f5cf14d5f3ced4d70afbe80e5a02a4..92dd499c9e9e68925925fba31a25df5a8e13a32d 100644 (file)
@@ -1,3 +1,8 @@
+2003-07-21  Geoffrey Keating  <geoffk@apple.com>
+
+       * c-pragma.c (maybe_apply_pragma_weak): Don't get DECL_ASSEMBLER_NAME
+       when it's not needed.
+
 2003-07-21  Jakub Jelinek  <jakub@redhat.com>
 
        * config/rs6000/rs6000.h (machine_function): Add ra_need_lr.
index dc9573397ec7c7bf6ede667aa5224f6f0117b4be..c0bfc295749640fee736b58f2f1694ff4a676619 100644 (file)
@@ -286,15 +286,22 @@ maybe_apply_pragma_weak (tree decl)
 {
   tree *p, t, id;
 
-  /* Copied from the check in set_decl_assembler_name.  */
-  if (TREE_CODE (decl) == FUNCTION_DECL
-      || (TREE_CODE (decl) == VAR_DECL 
-          && (TREE_STATIC (decl) 
-              || DECL_EXTERNAL (decl) 
-              || TREE_PUBLIC (decl))))
-    id = DECL_ASSEMBLER_NAME (decl);
-  else
+  /* Avoid asking for DECL_ASSEMBLER_NAME when it's not needed.  */
+
+  /* No weak symbols pending, take the short-cut.  */
+  if (!pending_weaks)
+    return;
+  /* If it's not visible outside this file, it doesn't matter whether
+     it's weak.  */
+  if (!DECL_EXTERNAL (decl) && !TREE_PUBLIC (decl))
     return;
+  /* If it's not a function or a variable, it can't be weak.
+     FIXME: what kinds of things are visible outside this file but
+     aren't functions or variables?   Should this be an abort() instead?  */
+  if (TREE_CODE (decl) != FUNCTION_DECL && TREE_CODE (decl) != VAR_DECL)
+    return;
+
+  id = DECL_ASSEMBLER_NAME (decl);
 
   for (p = &pending_weaks; (t = *p) ; p = &TREE_CHAIN (t))
     if (id == TREE_PURPOSE (t))