aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorRichard Henderson <rth@redhat.com>2002-05-15 17:14:24 -0700
committerRichard Henderson <rth@gcc.gnu.org>2002-05-15 17:14:24 -0700
commit34fb9ba554ab82c877dc0475d78deb166c745941 (patch)
tree894268a09d2e902af191bc2e452a1bcab3f8eaa1 /gcc
parent62e118f59f99d1066c4577d1321c90f5f7a5589d (diff)
downloadgcc-34fb9ba554ab82c877dc0475d78deb166c745941.zip
gcc-34fb9ba554ab82c877dc0475d78deb166c745941.tar.gz
gcc-34fb9ba554ab82c877dc0475d78deb166c745941.tar.bz2
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
Diffstat (limited to 'gcc')
-rw-r--r--gcc/ChangeLog4
-rw-r--r--gcc/testsuite/ChangeLog4
-rw-r--r--gcc/testsuite/gcc.dg/weak-5.c6
-rw-r--r--gcc/varasm.c11
4 files changed, 12 insertions, 13 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index a83b903..714b5fd 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,7 @@
+2002-05-15 Richard Henderson <rth@redhat.com>
+
+ * varasm.c (merge_weak): Remove special case for extern and common.
+
2002-05-15 Matt Hiller <hiller@redhat.com>
* testsuite/gcc.c-torture/compile/20000804-1.x: Don't return 1 if
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index 5676c95..e2b5ff0 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,5 +1,9 @@
2002-05-15 Richard Henderson <rth@redhat.com>
+ * gcc.dg/weak-5.c (vfoo1c, vfoo1g): Warn here.
+
+2002-05-15 Richard Henderson <rth@redhat.com>
+
* gcc.dg/weak-5.c (vfoo1c): No warning here.
(vfoo1f): Warning here.
(vfoo1l): Don't redefine the alias.
diff --git a/gcc/testsuite/gcc.dg/weak-5.c b/gcc/testsuite/gcc.dg/weak-5.c
index e531b27..8576379 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 05a8ada..4a88412 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)