diff options
author | Geoffrey Keating <geoffk@apple.com> | 2003-07-22 02:23:27 +0000 |
---|---|---|
committer | Geoffrey Keating <geoffk@gcc.gnu.org> | 2003-07-22 02:23:27 +0000 |
commit | d05cc98eafce6ea54bea577e95051a67431ee2db (patch) | |
tree | 98098a4e404ebad844fcaa48331d8916995c5166 /gcc/c-decl.c | |
parent | 905bd7b527bc0134241aad1d566fd55bf09a5ef5 (diff) | |
download | gcc-d05cc98eafce6ea54bea577e95051a67431ee2db.zip gcc-d05cc98eafce6ea54bea577e95051a67431ee2db.tar.gz gcc-d05cc98eafce6ea54bea577e95051a67431ee2db.tar.bz2 |
c-decl.c (start_decl): Don't call maybe_apply_pragma_weak here.
* 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
Diffstat (limited to 'gcc/c-decl.c')
-rw-r--r-- | gcc/c-decl.c | 30 |
1 files changed, 22 insertions, 8 deletions
diff --git a/gcc/c-decl.c b/gcc/c-decl.c index 92a8d85..6f5e631 100644 --- a/gcc/c-decl.c +++ b/gcc/c-decl.c @@ -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))) { |