From: Mark Mitchell Date: Mon, 17 May 1999 07:21:14 +0000 (+0000) Subject: tree.def (TYPE_NONCOPIED_PARTS): Revise documentation to match reality. X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=c15398de775ea6bb100d761e7ebad03d2daec8a4;p=gcc.git tree.def (TYPE_NONCOPIED_PARTS): Revise documentation to match reality. * tree.def (TYPE_NONCOPIED_PARTS): Revise documentation to match reality. * expr.c (init_noncopied_parts): Don't generate initializers for parts that don't need them. From-SVN: r26969 --- diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 193fde86f77..0a38aef0ebd 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,10 @@ +Mon May 17 07:23:34 1999 Mark Mitchell + + * tree.def (TYPE_NONCOPIED_PARTS): Revise documentation to match + reality. + * expr.c (init_noncopied_parts): Don't generate initializers for + parts that don't need them. + Mon May 17 02:56:35 PDT 1999 Jeff Law (law@cygnus.com) * version.c: Bump for snapshot. diff --git a/gcc/expr.c b/gcc/expr.c index 17fa1be1fdc..e5ef6e1ec88 100644 --- a/gcc/expr.c +++ b/gcc/expr.c @@ -5097,7 +5097,7 @@ init_noncopied_parts (lhs, list) for (tail = list; tail; tail = TREE_CHAIN (tail)) if (TREE_CODE (TREE_VALUE (tail)) == TREE_LIST) parts = chainon (parts, init_noncopied_parts (lhs, TREE_VALUE (tail))); - else + else if (TREE_PURPOSE (tail)) { tree part = TREE_VALUE (tail); tree part_type = TREE_TYPE (part); diff --git a/gcc/tree.def b/gcc/tree.def index 64fe0e4c89b..2056c629fbb 100644 --- a/gcc/tree.def +++ b/gcc/tree.def @@ -98,8 +98,14 @@ DEFTREECODE (BLOCK, "block", 'b', 0) points to the start of the chain. The TYPE_NONCOPIED_PARTS field is a list specifying which parts of an object of this type should *not* be copied by assignment. - The TREE_PURPOSE of each element is the offset of the part - and the TREE_VALUE is the size in bits of the part. + The TREE_VALUE of each is a FIELD_DECL that should not be + copied. The TREE_PURPOSE is an initial value for that field when + an object of this type is initialized via an INIT_EXPR. It may + be NULL if no special value is required. Even the things in this + list are copied if the right-hand side of an assignment is known + to be a complete object (rather than being, perhaps, a subobject + of some other object.) The determination of what constitutes a + complete object is done by fixed_type_p. The TYPE_NAME field contains info on the name used in the program for this type (for GDB symbol table output). It is either a TYPE_DECL node, for types that are typedefs, or an IDENTIFIER_NODE