aboutsummaryrefslogtreecommitdiff
path: root/gcc/c-common.c
diff options
context:
space:
mode:
authorJakub Jelinek <jakub@redhat.com>2006-08-17 13:52:26 +0200
committerJakub Jelinek <jakub@gcc.gnu.org>2006-08-17 13:52:26 +0200
commit343d4b27bf3dfdd3042389dbdaff2afe427864f6 (patch)
tree1079f5fa46aa27a5d4a1d75e9246bdc01981cd50 /gcc/c-common.c
parent7ffaaddcdaf19adac105e8481e83ef32c059b641 (diff)
downloadgcc-343d4b27bf3dfdd3042389dbdaff2afe427864f6.zip
gcc-343d4b27bf3dfdd3042389dbdaff2afe427864f6.tar.gz
gcc-343d4b27bf3dfdd3042389dbdaff2afe427864f6.tar.bz2
re PR c/28744 (externally_visible attribute not effective with prior declaration of symbol.)
PR c/28744 * cgraph.h (struct cgraph_node): Remove externally_visible bitfield. * cgraphunit.c (process_function_and_variable_attributes): Set local.externally_visible rather than externally_visible. PR c/28744 * c-common.c (handle_externally_visible_attribute): First look at TREE_CODE and only if it is function or var decl, check for non-public objects. Don't warn for DECL_EXTERNAL. * cgraphunit.c (process_function_and_variable_attributes): Warn if externally_visible attribute is used on non-public object. * gcc.dg/attr-externally-visible-1.c: New test. * gcc.dg/attr-externally-visible-2.c: New test. * g++.dg/parse/attr-externally-visible-1.C: New test. * g++.dg/parse/attr-externally-visible-2.C: New test. From-SVN: r116222
Diffstat (limited to 'gcc/c-common.c')
-rw-r--r--gcc/c-common.c16
1 files changed, 8 insertions, 8 deletions
diff --git a/gcc/c-common.c b/gcc/c-common.c
index 17643f0..a6b3299 100644
--- a/gcc/c-common.c
+++ b/gcc/c-common.c
@@ -4301,16 +4301,16 @@ handle_externally_visible_attribute (tree *pnode, tree name,
{
tree node = *pnode;
- if ((!TREE_STATIC (node) && TREE_CODE (node) != FUNCTION_DECL)
- || !TREE_PUBLIC (node))
+ if (TREE_CODE (node) == FUNCTION_DECL || TREE_CODE (node) == VAR_DECL)
{
- warning (OPT_Wattributes,
- "%qE attribute have effect only on public objects", name);
- *no_add_attrs = true;
+ if ((!TREE_STATIC (node) && TREE_CODE (node) != FUNCTION_DECL
+ && !DECL_EXTERNAL (node)) || !TREE_PUBLIC (node))
+ {
+ warning (OPT_Wattributes,
+ "%qE attribute have effect only on public objects", name);
+ *no_add_attrs = true;
+ }
}
- else if (TREE_CODE (node) == FUNCTION_DECL
- || TREE_CODE (node) == VAR_DECL)
- ;
else
{
warning (OPT_Wattributes, "%qE attribute ignored", name);