From 34fb9ba554ab82c877dc0475d78deb166c745941 Mon Sep 17 00:00:00 2001 From: Richard Henderson Date: Wed, 15 May 2002 17:14:24 -0700 Subject: [PATCH] varasm.c (merge_weak): Remove special case for extern and common. * varasm.c (merge_weak): Remove special case for extern and common. * gcc.dg/weak-5.c (vfoo1c, vfoo1g): Warn here. From-SVN: r53498 --- gcc/ChangeLog | 4 ++++ gcc/testsuite/ChangeLog | 4 ++++ gcc/testsuite/gcc.dg/weak-5.c | 6 +++--- gcc/varasm.c | 11 +---------- 4 files changed, 12 insertions(+), 13 deletions(-) diff --git a/gcc/ChangeLog b/gcc/ChangeLog index a83b9034d4e..714b5fda51e 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,7 @@ +2002-05-15 Richard Henderson + + * varasm.c (merge_weak): Remove special case for extern and common. + 2002-05-15 Matt Hiller * testsuite/gcc.c-torture/compile/20000804-1.x: Don't return 1 if diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 5676c95265e..e2b5ff06f46 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,7 @@ +2002-05-15 Richard Henderson + + * gcc.dg/weak-5.c (vfoo1c, vfoo1g): Warn here. + 2002-05-15 Richard Henderson * gcc.dg/weak-5.c (vfoo1c): No warning here. diff --git a/gcc/testsuite/gcc.dg/weak-5.c b/gcc/testsuite/gcc.dg/weak-5.c index e531b27beeb..8576379d3fb 100644 --- a/gcc/testsuite/gcc.dg/weak-5.c +++ b/gcc/testsuite/gcc.dg/weak-5.c @@ -44,7 +44,7 @@ void * foo1c (void) { return (void *)&vfoo1c; } -extern int vfoo1c __attribute__((weak)); +extern int vfoo1c __attribute__((weak)); /* { dg-warning "unspecified behavior" } */ extern int vfoo1d __attribute__((weak)); @@ -68,7 +68,7 @@ void * foo1f (void) { return (void *)&vfoo1f; } -extern int vfoo1f __attribute__((weak)); /* { dg-warning "weak declaration" "weak declaration" } */ +extern int vfoo1f __attribute__((weak)); /* { dg-warning "unspecified behavior" } */ extern int vfoo1g; @@ -76,7 +76,7 @@ void * foo1g (void) { return (void *)&vfoo1g; } -int vfoo1g __attribute__((weak)); +int vfoo1g __attribute__((weak)); /* { dg-warning "unspecified behavior" } */ extern int vfoo1h __attribute__((weak)); diff --git a/gcc/varasm.c b/gcc/varasm.c index 05a8ada095b..4a884123028 100644 --- a/gcc/varasm.c +++ b/gcc/varasm.c @@ -4848,16 +4848,7 @@ merge_weak (newdecl, olddecl) have done so in a way that will not function properly with a weak symbol. */ else if (TREE_USED (olddecl) - && TREE_SYMBOL_REFERENCED (DECL_ASSEMBLER_NAME (olddecl)) - /* ??? Not impossible that some platform may generate code - that doesn't function *at all* with incorrect declaration - before use. However, all known at present will assume - exteral and common symbols are not "local". */ - /* ??? Probably these exceptions to the rule will just - confuse users about the true nature of the problem and - we should warn for *any* use before weakening. */ - && ! (DECL_EXTERNAL (olddecl) - || DECL_COMMON (olddecl))) + && TREE_SYMBOL_REFERENCED (DECL_ASSEMBLER_NAME (olddecl))) warning_with_decl (newdecl, "weak declaration of `%s' after first use results in unspecified behavior"); if (SUPPORTS_WEAK) -- 2.30.2