tree.def (TYPE_NONCOPIED_PARTS): Revise documentation to match reality.
authorMark Mitchell <mark@codesourcery.com>
Mon, 17 May 1999 07:21:14 +0000 (07:21 +0000)
committerMark Mitchell <mmitchel@gcc.gnu.org>
Mon, 17 May 1999 07:21:14 +0000 (07:21 +0000)
* 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

gcc/ChangeLog
gcc/expr.c
gcc/tree.def

index 193fde86f7787385ed07486ace9403db7b2503d7..0a38aef0ebdb54de2864880742e26593af5601b8 100644 (file)
@@ -1,3 +1,10 @@
+Mon May 17 07:23:34 1999  Mark Mitchell  <mark@codesourcery.com>
+
+       * 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.
index 17fa1be1fdc4dc2750c2ce74ad828780a578632c..e5ef6e1ec880576a948ff512d756af8a52a474bc 100644 (file)
@@ -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);
index 64fe0e4c89b711e19979b0751c66d65c6cad3776..2056c629fbbfdaccf02f4e13f3501ae3503a383f 100644 (file)
@@ -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