+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
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",
}
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);
&& (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))