diff options
author | Jakub Jelinek <jakub@redhat.com> | 2006-08-17 13:52:26 +0200 |
---|---|---|
committer | Jakub Jelinek <jakub@gcc.gnu.org> | 2006-08-17 13:52:26 +0200 |
commit | 343d4b27bf3dfdd3042389dbdaff2afe427864f6 (patch) | |
tree | 1079f5fa46aa27a5d4a1d75e9246bdc01981cd50 /gcc/c-common.c | |
parent | 7ffaaddcdaf19adac105e8481e83ef32c059b641 (diff) | |
download | gcc-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.c | 16 |
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); |