aboutsummaryrefslogtreecommitdiff
path: root/gcc/c-pragma.c
diff options
context:
space:
mode:
authorFranz Sirl <franz.sirl-kernel@lauterbach.com>2002-04-28 18:31:34 +0000
committerFranz Sirl <franz.sirl-kernel@lauterbach.com>2002-04-28 18:31:34 +0000
commita34f7e08f066f5a202d83177796d98196d0704b1 (patch)
treebf07a3136b537dc0844e7c227d87d6ade6e858ef /gcc/c-pragma.c
parente0a44adb265d89936084887c15ae5427a7b39391 (diff)
2002-04-28 Franz Sirl <Franz.Sirl-kernel@lauterbach.com>
PR c/6343 * c-decl.c (duplicate_decls): Call merge_weak. * c-pragma.c (apply_pragma_weak): Warn about misuse. * output.h (merge_weak): Prototype merge_weak. * varasm.c (merge_weak): New function. (declare_weak): Make sure we don't give an error on VAR_DECLs. Mark RTL with SYMBOL_REF_WEAK. cp: * decl.c (duplicate_decls): Call merge_weak. testsuite: * gcc.dg/weak-[2-7].c: New tests. git-svn-id: https://gcc.gnu.org/svn/gcc/trunk@52844 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'gcc/c-pragma.c')
-rw-r--r--gcc/c-pragma.c4
1 files changed, 4 insertions, 0 deletions
diff --git a/gcc/c-pragma.c b/gcc/c-pragma.c
index 4bf7ce205ac..d5df3559597 100644
--- a/gcc/c-pragma.c
+++ b/gcc/c-pragma.c
@@ -287,6 +287,10 @@ apply_pragma_weak (decl, value)
decl_attributes (&decl, build_tree_list (get_identifier ("alias"),
build_tree_list (NULL, value)),
0);
+ if (SUPPORTS_WEAK && DECL_EXTERNAL (decl) && TREE_USED (decl)
+ && TREE_SYMBOL_REFERENCED (DECL_ASSEMBLER_NAME (decl)))
+ warning_with_decl (decl, "applying #pragma weak `%s' after first use results in unspecified behavior");
+
declare_weak (decl);
}