re PR c++/32054 (Storage classes on anonymous unions in classes)

/cp
2012-05-25  Paolo Carlini  <paolo.carlini@oracle.com>

	PR c++/32054
	* parser.c (cp_parser_member_declaration): A storage class is not
	allowed in a declaration of an anonymous aggregate in a class scope.

/testsuite
2012-05-25  Paolo Carlini  <paolo.carlini@oracle.com>

	PR c++/32054
	* g++.dg/other/anon-union3.C: New.

From-SVN: r187902
This commit is contained in:
Paolo Carlini 2012-05-25 23:40:10 +00:00 committed by Paolo Carlini
parent d4dc840de4
commit 6d199d3c08
4 changed files with 42 additions and 0 deletions

View File

@ -1,3 +1,9 @@
2012-05-25 Paolo Carlini <paolo.carlini@oracle.com>
PR c++/32054
* parser.c (cp_parser_member_declaration): A storage class is not
allowed in a declaration of an anonymous aggregate in a class scope.
2012-05-24 Uros Bizjak <ubizjak@gmail.com>
PR obj-c++/53441

View File

@ -18910,6 +18910,12 @@ cp_parser_member_declaration (cp_parser* parser)
particular type), as opposed to a nested class. */
else if (ANON_AGGR_TYPE_P (type))
{
/* C++11 9.5/6. */
if (decl_specifiers.storage_class != sc_none)
error_at (decl_spec_token_start->location,
"a storage class on an anonymous aggregate "
"in class scope is not allowed");
/* Remove constructors and such from TYPE, now that we
know it is an anonymous aggregate. */
fixup_anonymous_aggr (type);

View File

@ -1,3 +1,8 @@
2012-05-25 Paolo Carlini <paolo.carlini@oracle.com>
PR c++/32054
* g++.dg/other/anon-union3.C: New.
2012-05-25 Ian Lance Taylor <iant@google.com>
* gcc.dg/split-6.c: New test.

View File

@ -0,0 +1,25 @@
// PR c++/32054
class C
{
auto union // { dg-error "storage class" "" { target c++98 } }
{
int a;
}; // { dg-error "multiple|specified" "" { target c++11 } }
register union // { dg-error "storage class" }
{
int b;
};
static union // { dg-error "storage class" }
{
int c;
};
extern union // { dg-error "storage class" }
{
int d;
};
mutable union // { dg-error "storage class" }
{
int e;
};
};