aboutsummaryrefslogtreecommitdiff
path: root/gcc/varasm.c
diff options
context:
space:
mode:
authorJan Hubicka <hubicka@ucw.cz>2014-09-20 01:56:52 +0200
committerJan Hubicka <hubicka@gcc.gnu.org>2014-09-19 23:56:52 +0000
commitf7217cde7f382aeb19dd3e80bc8f7ffae798315f (patch)
treed7d5f6d00208bddb323b80ac27eed3ded29bed4a /gcc/varasm.c
parent3f99b0612f7db76b6ed1a25ecce8fa327eec9f61 (diff)
downloadgcc-f7217cde7f382aeb19dd3e80bc8f7ffae798315f.zip
gcc-f7217cde7f382aeb19dd3e80bc8f7ffae798315f.tar.gz
gcc-f7217cde7f382aeb19dd3e80bc8f7ffae798315f.tar.bz2
re PR c++/61825 (g++.dg/cpp0x/static_assert9.C FAILs)
PR c++/61825 * c-family/c-common.c (handle_alias_ifunc_attribute): Check that visibility change is possible (handle_weakref_attribute): Likewise. * cgraph.h (symtab_node): Add method get_create and field refuse_visibility_changes. (symtab_node::get_create): New method. * fold-const.c (tree_single_nonzero_warnv_p): Use get_create. * varasm.c (mark_weak): Verify that visibility change is possible. * gcc.dg/tree-ssa/nonzero-1.c: Require error to be output. From-SVN: r215409
Diffstat (limited to 'gcc/varasm.c')
-rw-r--r--gcc/varasm.c6
1 files changed, 6 insertions, 0 deletions
diff --git a/gcc/varasm.c b/gcc/varasm.c
index 111c657..dd3211a 100644
--- a/gcc/varasm.c
+++ b/gcc/varasm.c
@@ -5230,6 +5230,12 @@ output_constructor (tree exp, unsigned HOST_WIDE_INT size,
static void
mark_weak (tree decl)
{
+ if (DECL_WEAK (decl))
+ return;
+
+ struct symtab_node *n = symtab_node::get (decl);
+ if (n && n->refuse_visibility_changes)
+ error ("%+D declared weak after being used", decl);
DECL_WEAK (decl) = 1;
if (DECL_RTL_SET_P (decl)