Commit aa09f986 by Jason Merrill Committed by Jason Merrill

re PR c++/21581 ((optimisation) Functions in anonymous namespaces should default…

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
parent c4963a0a
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
......
......@@ -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);
......
......@@ -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))
......
// PR c++/21581
// Test for anonymous namespace default hidden visibility
// { dg-require-visibility "" }
// { dg-final { scan-hidden "_ZN.*1fEv" } }
namespace
{
int f() { }
}
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment