mirror of
git://gcc.gnu.org/git/gcc.git
synced 2025-02-06 01:29:52 +08:00
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
This commit is contained in:
parent
62e118f59f
commit
34fb9ba554
@ -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
|
||||
|
@ -1,3 +1,7 @@
|
||||
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.
|
||||
|
@ -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));
|
||||
|
11
gcc/varasm.c
11
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)
|
||||
|
Loading…
Reference in New Issue
Block a user