* tree.def (PLACEHOLDER_EXPR): Clarify commentary.
authorPeter Gerwinski <peter@gerwinski.de>
Fri, 5 Dec 2003 10:36:22 +0000 (10:36 +0000)
committerRichard Henderson <rth@gcc.gnu.org>
Fri, 5 Dec 2003 10:36:22 +0000 (02:36 -0800)
From-SVN: r74322

gcc/ChangeLog
gcc/tree.def

index a4dd711426229442c4f6b73e644bd59aafe2dbc0..f78a8346d11b278c7daddab0badf16b1e0786be1 100644 (file)
@@ -1,3 +1,7 @@
+2003-12-05  Peter Gerwinski <peter@gerwinski.de>
+
+        * tree.def (PLACEHOLDER_EXPR): Clarify commentary.
+
 2003-12-05  Steven Bosscher  <stevenb@suse.de>
 
        * config/d30v/d30v-protos.h , config/d30v/d30v.c,
index 4b6d236dde6efa2b4d2757a97cc2db3646a71d23..79bb63e220a636641fac0ba9b12ed319668f493d 100644 (file)
@@ -509,7 +509,8 @@ DEFTREECODE (CLEANUP_POINT_EXPR, "cleanup_point_expr", 'e', 1)
    some field in an object of the type contains a value that is used in
    the computation of another field's offset or size and/or the size of
    the type.  The positions and/or sizes of fields can vary from object
-   to object of the same type.
+   to object of the same type or even for one and the same object within
+   its scope.
 
    Record types with discriminants in Ada or schema types in Pascal are
    examples of such types.  This mechanism is also used to create "fat
@@ -533,7 +534,16 @@ DEFTREECODE (CLEANUP_POINT_EXPR, "cleanup_point_expr", 'e', 1)
    For example, if your type FOO is a RECORD_TYPE with a field BAR,
    and you need the value of <variable>.BAR to calculate TYPE_SIZE
    (FOO), just substitute <variable> above with a PLACEHOLDER_EXPR
-   what contains both the expression we wish to
+   whose TREE_TYPE is FOO.  Then construct your COMPONENT_REF with
+   the PLACEHOLDER_EXPR as the first operand (which has the correct
+   type).  Later, when the size is needed in the program, the back-end
+   will find this PLACEHOLDER_EXPR and generate code to calculate the
+   actual size at run-time.  In the following, we describe how this
+   calculation is done.
+
+   When we wish to evaluate a size or offset, we check whether it
+   contains a PLACEHOLDER_EXPR.  If it does, we construct a
+   WITH_RECORD_EXPR that contains both the expression we wish to
    evaluate and an expression within which the object may be found.
    The latter expression is the object itself in the simple case of an
    Ada record with discriminant, but it can be the array in the case of