c++: Name as_base type
authorNathan Sidwell <nathan@acm.org>
Wed, 22 Jul 2020 19:00:02 +0000 (12:00 -0700)
committerNathan Sidwell <nathan@acm.org>
Mon, 27 Jul 2020 20:13:32 +0000 (13:13 -0700)
commitb95eba48a1a25284ce7385bbfa0ee733124cb84b
tree4c1b9723d3886d37b903f94928dc2ac40c7ba65e
parent07bd5544a3ab3a04d1652dbcb5a09d7271a9706a
c++: Name as_base type

The as-base type never got a name.  For modules I needed to give it a
name to serialize properly, and it's useful when debugging the
compiler, so we may as well have it on trunk.  There's also a bug
where its fields can have NSDMIs from the main class.  This happens to
be silent on trunk, but can be a GC leak where we retain a deferred
parse node there. (On modules it blows up, because we're not prepared
to serialize deferred parse nodes, as they should never survive
parsing.

gcc/cp/
* cp-tree.h (enum cp_tree_index): Add CPTI_AS_BASE_IDENTIFIER.
(as_base_identifier): Define.
* decl.c (initialize_predifined_identifiers): Initialize as_base
identifier.
* class.c (layout_class_type): Name the as-base type.  Zap
NSDMI its fields may have.
gcc/cp/class.c
gcc/cp/cp-tree.h
gcc/cp/decl.c