* class.c (finish_struct_anon): Forbid nested classes.

From-SVN: r44148
This commit is contained in:
Mark Mitchell 2001-07-19 07:22:40 +00:00 committed by Mark Mitchell
parent 69e6b1d4b2
commit b7076960b3
3 changed files with 13 additions and 2 deletions

View file

@ -1,3 +1,7 @@
2001-07-19 Mark Mitchell <mark@codesourcery.com>
* class.c (finish_struct_anon): Forbid nested classes.
2001-07-19 Neil Booth <neil@daikokuya.demon.co.uk>
* decl2.c: Don't include dwarfout.h and dwarf2out.h.

View file

@ -3132,7 +3132,14 @@ finish_struct_anon (t)
tree elt = TYPE_FIELDS (TREE_TYPE (field));
for (; elt; elt = TREE_CHAIN (elt))
{
if (DECL_ARTIFICIAL (elt))
/* We're generally only interested in entities the user
declared, but we also find nested classes by noticing
the TYPE_DECL that we create implicitly. You're
allowed to put one anonymous union inside another,
though, so we explicitly tolerate that. */
if (DECL_ARTIFICIAL (elt)
&& (!DECL_IMPLICIT_TYPEDEF_P (elt)
|| ANON_AGGR_TYPE_P (TREE_TYPE (elt))))
continue;
if (DECL_NAME (elt) == constructor_name (t))

View file

@ -8,7 +8,7 @@ public:
private:
union {
float vf;
struct ff {
struct ff { // ERROR - nested class in anonymous union
void *ptr;
char *name;
int sz;