Commit 34fb9ba5 by Richard Henderson Committed by Richard Henderson

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
parent 62e118f5
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> 2002-05-15 Matt Hiller <hiller@redhat.com>
* testsuite/gcc.c-torture/compile/20000804-1.x: Don't return 1 if * testsuite/gcc.c-torture/compile/20000804-1.x: Don't return 1 if
......
2002-05-15 Richard Henderson <rth@redhat.com> 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. * gcc.dg/weak-5.c (vfoo1c): No warning here.
(vfoo1f): Warning here. (vfoo1f): Warning here.
(vfoo1l): Don't redefine the alias. (vfoo1l): Don't redefine the alias.
......
...@@ -44,7 +44,7 @@ void * foo1c (void) ...@@ -44,7 +44,7 @@ void * foo1c (void)
{ {
return (void *)&vfoo1c; return (void *)&vfoo1c;
} }
extern int vfoo1c __attribute__((weak)); extern int vfoo1c __attribute__((weak)); /* { dg-warning "unspecified behavior" } */
extern int vfoo1d __attribute__((weak)); extern int vfoo1d __attribute__((weak));
...@@ -68,7 +68,7 @@ void * foo1f (void) ...@@ -68,7 +68,7 @@ void * foo1f (void)
{ {
return (void *)&vfoo1f; 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; extern int vfoo1g;
...@@ -76,7 +76,7 @@ void * foo1g (void) ...@@ -76,7 +76,7 @@ void * foo1g (void)
{ {
return (void *)&vfoo1g; return (void *)&vfoo1g;
} }
int vfoo1g __attribute__((weak)); int vfoo1g __attribute__((weak)); /* { dg-warning "unspecified behavior" } */
extern int vfoo1h __attribute__((weak)); extern int vfoo1h __attribute__((weak));
......
...@@ -4848,16 +4848,7 @@ merge_weak (newdecl, olddecl) ...@@ -4848,16 +4848,7 @@ merge_weak (newdecl, olddecl)
have done so in a way that will not function properly with have done so in a way that will not function properly with
a weak symbol. */ a weak symbol. */
else if (TREE_USED (olddecl) else if (TREE_USED (olddecl)
&& TREE_SYMBOL_REFERENCED (DECL_ASSEMBLER_NAME (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)))
warning_with_decl (newdecl, "weak declaration of `%s' after first use results in unspecified behavior"); warning_with_decl (newdecl, "weak declaration of `%s' after first use results in unspecified behavior");
if (SUPPORTS_WEAK) if (SUPPORTS_WEAK)
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment