c++: ICE on anon struct with base [PR96636]

pinski pointed out that my recent change to reject anonymous structs with
bases was relevant to this PR.  But we still ICEd after giving that error;
this fixes the ICE.

	PR c++/96636

gcc/cp/ChangeLog:

	* decl.c (fixup_anonymous_aggr): Clear TYPE_NEEDS_CONSTRUCTING
	after error.

gcc/testsuite/ChangeLog:

	* g++.dg/ext/anon-struct9.C: New test.
This commit is contained in:
Jason Merrill 2021-07-30 16:49:03 -04:00
parent 5b759cdcb7
commit af76342b44
2 changed files with 14 additions and 1 deletions

View File

@ -5094,7 +5094,11 @@ fixup_anonymous_aggr (tree t)
tree field, type;
if (BINFO_N_BASE_BINFOS (TYPE_BINFO (t)))
error_at (location_of (t), "anonymous struct with base classes");
{
error_at (location_of (t), "anonymous struct with base classes");
/* Avoid ICE after error on anon-struct9.C. */
TYPE_NEEDS_CONSTRUCTING (t) = false;
}
for (field = TYPE_FIELDS (t); field; field = DECL_CHAIN (field))
if (TREE_CODE (field) == FIELD_DECL)

View File

@ -0,0 +1,9 @@
// PR c++/96636
// { dg-options "" }
typedef class {
class a {};
class : virtual a {}; // { dg-error "anonymous struct with base" }
} b;
void foo(){ b();}