parse.y (check_class_key): Allow KEY to be union/enum/struct/class node with attributes.

* parse.y (check_class_key): Allow KEY to be union/enum/struct/class
	node with attributes.

	* g++.dg/parse/attr1.C: New test.

From-SVN: r52678
This commit is contained in:
Jakub Jelinek 2002-04-23 22:59:05 +02:00 committed by Jakub Jelinek
parent 7e67bb8588
commit 29cece2e5d
4 changed files with 61 additions and 0 deletions

View File

@ -1,3 +1,8 @@
2002-04-23 Jakub Jelinek <jakub@redhat.com>
* parse.y (check_class_key): Allow KEY to be union/enum/struct/class
node with attributes.
2002-2-23 David O'Brien <obrien@FreeBSD.org> 2002-2-23 David O'Brien <obrien@FreeBSD.org>
* g++spec.c (MATH_LIBRARY_PROFILE, LIBSTDCXX_PROFILE): Add. * g++spec.c (MATH_LIBRARY_PROFILE, LIBSTDCXX_PROFILE): Add.

View File

@ -214,6 +214,8 @@ check_class_key (key, aggr)
tree key; tree key;
tree aggr; tree aggr;
{ {
if (TREE_CODE (key) == TREE_LIST)
key = TREE_VALUE (key);
if ((key == union_type_node) != (TREE_CODE (aggr) == UNION_TYPE)) if ((key == union_type_node) != (TREE_CODE (aggr) == UNION_TYPE))
pedwarn ("`%s' tag used in naming `%#T'", pedwarn ("`%s' tag used in naming `%#T'",
key == union_type_node ? "union" key == union_type_node ? "union"

View File

@ -1,3 +1,7 @@
2002-04-23 Jakub Jelinek <jakub@redhat.com>
* g++.dg/parse/attr1.C: New test.
2002-04-23 Roger Sayle <roger@eyesopen.com> 2002-04-23 Roger Sayle <roger@eyesopen.com>
* gcc.c-torture/execute/string-opt-17.c: New test case. * gcc.c-torture/execute/string-opt-17.c: New test case.

View File

@ -0,0 +1,50 @@
// Test whether attributes are accepted both immediately after
// struct/union keyword and after the closing brace.
// { dg-do compile }
struct foo
{
union __attribute__ ((packed))
{
int a;
long b;
};
union __attribute__ ((packed)) __attribute__ ((unused))
{
int c;
long d;
};
};
union __attribute__ ((packed)) bar
{
int c;
long d;
};
struct __attribute__ ((packed)) baz
{
int e;
long f;
};
struct foo2
{
union
{
int a;
long b;
} __attribute__ ((packed));
};
union bar2
{
int c;
long d;
} __attribute__ ((packed));
struct baz2
{
int e;
long f;
} __attribute__ ((packed));