re PR c++/21581 ((optimisation) Functions in anonymous namespaces should default to "hidden" visibility)

PR c++/21581
        * parser.c (cp_parser_declaration): Support attributes on
        anonymous namespaces.
        * name-lookup.c (push_namespace_with_attribs): Anonymous
        namespaces default to hidden visibility.

From-SVN: r112250
This commit is contained in:
Jason Merrill 2006-03-21 11:15:25 -05:00 committed by Jason Merrill
parent c4963a0a32
commit aa09f986bc
4 changed files with 32 additions and 4 deletions

View File

@ -1,3 +1,11 @@
2006-03-21 Jason Merrill <jason@redhat.com>
PR c++/21581
* parser.c (cp_parser_declaration): Support attributes on
anonymous namespaces.
* name-lookup.c (push_namespace_with_attribs): Anonymous
namespaces default to hidden visibility.
2006-03-20 Jason Merrill <jason@redhat.com>
PR c++/21764, c++/19238

View File

@ -3046,7 +3046,7 @@ push_namespace_with_attribs (tree name, tree attributes)
tree name = TREE_PURPOSE (d);
tree args = TREE_VALUE (d);
tree x;
if (! is_attribute_p ("visibility", name))
{
warning (OPT_Wattributes, "%qs attribute directive ignored",
@ -3055,16 +3055,25 @@ push_namespace_with_attribs (tree name, tree attributes)
}
x = args ? TREE_VALUE (args) : NULL_TREE;
if (x == NULL_TREE || TREE_CODE (x) != STRING_CST)
if (x == NULL_TREE || TREE_CODE (x) != STRING_CST || TREE_CHAIN (args))
{
warning (OPT_Wattributes, "%qs attribute requires an NTBS argument",
warning (OPT_Wattributes, "%qs attribute requires a single NTBS argument",
IDENTIFIER_POINTER (name));
continue;
}
current_binding_level->has_visibility = 1;
push_visibility (TREE_STRING_POINTER (x));
goto found;
}
if (anon)
{
/* Anonymous namespaces default to hidden visibility. This might
change once we implement export. */
current_binding_level->has_visibility = 1;
push_visibility ("hidden");
}
found:
#endif
timevar_pop (TV_NAME_LOOKUP);

View File

@ -7066,7 +7066,8 @@ cp_parser_declaration (cp_parser* parser)
&& (cp_lexer_peek_nth_token (parser->lexer, 3)->type
!= CPP_EQ))
/* An unnamed namespace definition. */
|| token2.type == CPP_OPEN_BRACE))
|| token2.type == CPP_OPEN_BRACE
|| token2.keyword == RID_ATTRIBUTE))
cp_parser_namespace_definition (parser);
/* Objective-C++ declaration/definition. */
else if (c_dialect_objc () && OBJC_IS_AT_KEYWORD (token1.keyword))

View File

@ -0,0 +1,10 @@
// PR c++/21581
// Test for anonymous namespace default hidden visibility
// { dg-require-visibility "" }
// { dg-final { scan-hidden "_ZN.*1fEv" } }
namespace
{
int f() { }
}