]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
c-decl.c (start_decl): Don't call maybe_apply_pragma_weak here.
authorGeoffrey Keating <geoffk@apple.com>
Tue, 22 Jul 2003 02:23:27 +0000 (02:23 +0000)
committerGeoffrey Keating <geoffk@gcc.gnu.org>
Tue, 22 Jul 2003 02:23:27 +0000 (02:23 +0000)
* c-decl.c (start_decl): Don't call maybe_apply_pragma_weak here.
(finish_decl): Call maybe_apply_pragma_weak here.
(grokdeclarator): Check that DECL_ASSEMBLER_NAME isn't set before
TREE_PUBLIC and TREE_STATIC are decided.
(start_function): Move call to maybe_apply_pragma_weak.  Check that
DECL_ASSEMBLER_NAME isn't set too early.

From-SVN: r69660

gcc/ChangeLog
gcc/c-decl.c

index bc66e09807190343510ed87c0d1b1ce45a1590f9..33ac2fe9d61360da32822d10bcc5be8c3ea62a32 100644 (file)
@@ -1,5 +1,12 @@
 2003-07-22  Geoffrey Keating  <geoffk@apple.com>
 
+       * c-decl.c (start_decl): Don't call maybe_apply_pragma_weak here.
+       (finish_decl): Call maybe_apply_pragma_weak here.
+       (grokdeclarator): Check that DECL_ASSEMBLER_NAME isn't set before
+       TREE_PUBLIC and TREE_STATIC are decided.
+       (start_function): Move call to maybe_apply_pragma_weak.  Check that
+       DECL_ASSEMBLER_NAME isn't set too early.
+
        * cpplex.c (_cpp_process_line_notes): Mention option name in
        trigraphs warning.
 
index 92a8d8586ff62848fc1d03ba42467516fef00067..6f5e631e936109f73f1b31718ca9dbe2096e18cb 100644 (file)
@@ -2706,10 +2706,6 @@ start_decl (tree declarator, tree declspecs, int initialized, tree attributes)
   /* Set attributes here so if duplicate decl, will have proper attributes.  */
   decl_attributes (&decl, attributes, 0);
 
-  /* If #pragma weak was used, mark the decl weak now.  */
-  if (current_binding_level == global_binding_level)
-    maybe_apply_pragma_weak (decl);
-
   if (TREE_CODE (decl) == FUNCTION_DECL
       && DECL_DECLARED_INLINE_P (decl)
       && DECL_UNINLINABLE (decl)
@@ -2890,6 +2886,10 @@ finish_decl (tree decl, tree init, tree asmspec_tree)
       SET_DECL_ASSEMBLER_NAME (decl, get_identifier (starred));
     }
 
+  /* If #pragma weak was used, mark the decl weak now.  */
+  if (current_binding_level == global_binding_level)
+    maybe_apply_pragma_weak (decl);
+
   /* Output the assembler code and/or RTL code for variables and functions,
      unless the type is an undefined structure or union.
      If not, it will get done when the type is completed.  */
@@ -4466,6 +4466,13 @@ grokdeclarator (tree declarator, tree declspecs,
     if (C_TYPE_FIELDS_VOLATILE (TREE_TYPE (decl)))
       c_mark_addressable (decl);
 
+#ifdef ENABLE_CHECKING
+  /* This is the earliest point at which we might know the assembler
+     name of a variable.  Thus, if it's known before this, die horribly.  */
+  if (DECL_ASSEMBLER_NAME_SET_P (decl))
+    abort ();
+#endif
+
     decl_attributes (&decl, returned_attrs, 0);
 
     return decl;
@@ -5540,10 +5547,6 @@ start_function (tree declspecs, tree declarator, tree attributes)
 
   decl_attributes (&decl1, attributes, 0);
 
-  /* If #pragma weak was used, mark the decl weak now.  */
-  if (current_binding_level == global_binding_level)
-    maybe_apply_pragma_weak (decl1);
-
   if (DECL_DECLARED_INLINE_P (decl1)
       && DECL_UNINLINABLE (decl1)
       && lookup_attribute ("noinline", DECL_ATTRIBUTES (decl1)))
@@ -5635,6 +5638,17 @@ start_function (tree declspecs, tree declarator, tree attributes)
   if (current_function_decl != 0)
     TREE_PUBLIC (decl1) = 0;
 
+#ifdef ENABLE_CHECKING
+  /* This is the earliest point at which we might know the assembler
+     name of the function.  Thus, if it's set before this, die horribly.  */
+  if (DECL_ASSEMBLER_NAME_SET_P (decl1))
+    abort ();
+#endif
+
+  /* If #pragma weak was used, mark the decl weak now.  */
+  if (current_binding_level == global_binding_level)
+    maybe_apply_pragma_weak (decl1);
+
   /* Warn for unlikely, improbable, or stupid declarations of `main'.  */
   if (warn_main > 0 && MAIN_NAME_P (DECL_NAME (decl1)))
     {