Commit 6bdb98d1 by Matt Austern Committed by Matt Austern

re PR c++/15049 ([DR 278/132/216/338/389/319] global variables with anonymous types are legal)

PR c++/15049
	* cp/decl.c (grokvardecl): Accept declarations of global variables
	using anonymous types.
	* testsuite/g++.dg/other/anon3.C: New.

From-SVN: r87814
parent 34f87940
2004-09-21 Matt Austern <austern@apple.com>
PR c++/15049
* decl.c (grokvardecl): Accept declarations of global variables
using anonymous types.
2004-09-21 Roger Sayle <roger@eyesopen.com>
PR c++/7503
......
......@@ -5931,17 +5931,29 @@ grokvardecl (tree type,
or enumeration declared in a local scope) shall not be used to
declare an entity with linkage.
Only check this for public decls for now. */
tree t = no_linkage_check (TREE_TYPE (decl),
/*relaxed_p=*/false);
Only check this for public decls for now. */
tree t1 = TREE_TYPE (decl);
tree t = no_linkage_check (t1, /*relaxed_p=*/false);
if (t)
{
if (TYPE_ANONYMOUS_P (t))
{
if (DECL_EXTERN_C_P (decl))
/* Allow this; it's pretty common in C. */;
/* Allow this; it's pretty common in C. */
;
else if (same_type_ignoring_top_level_qualifiers_p(t1, t))
/* This is something like "enum { a = 3 } x;", which is
well formed. The enum doesn't have "a name with no
linkage", because it has no name. See closed CWG issue
132.
Note that while this construct is well formed in C++03
it is likely to become ill formed in C++0x. See open
CWG issue 389 and related issues. */
;
else
{
/* It's a typedef referring to an anonymous type. */
pedwarn ("non-local variable `%#D' uses anonymous type",
decl);
if (DECL_ORIGINAL_TYPE (TYPE_NAME (t)))
......
2004-09-17 Matt Austern <austern@apple.com>
PR c++/15049
* g++.dg/other/anon3.C: New.
2004-09-21 Roger Sayle <roger@eyesopen.com>
PR c++/7503
......
// pr c++/15049
// Origin: Matt Austern <austern@apple.com>
// Test that we can declare a global variable whose type is anonymous.
// { dg-do compile }
enum { a = 3 } x;
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