From e3753785835fdb4c96f901c7d158a38b1c5c2f78 Mon Sep 17 00:00:00 2001 From: Nathan Sidwell Date: Thu, 16 May 2013 10:29:42 +0000 Subject: [PATCH] varasm.c (default_use_anchors_for_symbol_p): Use decl_replaceable_p. gcc/ * varasm.c (default_use_anchors_for_symbol_p): Use decl_replaceable_p. gcc/testsuite/ * gcc.dg/visibility-21.c: New. From-SVN: r198965 --- gcc/ChangeLog | 4 ++++ gcc/testsuite/ChangeLog | 4 ++++ gcc/testsuite/gcc.dg/visibility-21.c | 13 +++++++++++++ gcc/varasm.c | 6 +++--- 4 files changed, 24 insertions(+), 3 deletions(-) create mode 100644 gcc/testsuite/gcc.dg/visibility-21.c diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 3a0929cd122..d6f6e5a23e0 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,7 @@ +2013-05-16 Nathan Sidwell + + * varasm.c (default_use_anchors_for_symbol_p): Use decl_replaceable_p. + 2013-05-16 Marc Glisse PR middle-end/57286 diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 6ec937c4ad5..7bacbb58eea 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,7 @@ +2013-05-16 Nathan Sidwell + + * gcc.dg/visibility-21.c: New. + 2013-05-16 Marc Glisse PR middle-end/57286 diff --git a/gcc/testsuite/gcc.dg/visibility-21.c b/gcc/testsuite/gcc.dg/visibility-21.c new file mode 100644 index 00000000000..264204e848e --- /dev/null +++ b/gcc/testsuite/gcc.dg/visibility-21.c @@ -0,0 +1,13 @@ +/* Test visibility attribute on function definition. */ +/* { dg-do compile } */ +/* { dg-options "-O2 -fsection-anchors" } */ +/* { dg-require-visibility "" } */ +/* { dg-require-weak "" } */ +/* { dg-final { scan-assembler-not "ANCHOR" } } */ + +int __attribute__((weak, visibility("hidden"))) weak_hidden[3]; + +int *f_weak_hidden () +{ + return weak_hidden; +} diff --git a/gcc/varasm.c b/gcc/varasm.c index 6fb49cfa2d2..5f62677b2cc 100644 --- a/gcc/varasm.c +++ b/gcc/varasm.c @@ -6580,9 +6580,9 @@ default_use_anchors_for_symbol_p (const_rtx symbol) decl = SYMBOL_REF_DECL (symbol); if (decl && DECL_P (decl)) { - /* Don't use section anchors for decls that might be defined by - other modules. */ - if (!targetm.binds_local_p (decl)) + /* Don't use section anchors for decls that might be defined or + usurped by other modules. */ + if (TREE_PUBLIC (decl) && !decl_binds_to_current_def_p (decl)) return false; /* Don't use section anchors for decls that will be placed in a