tree.h (TYPE_NEEDS_CONSTRUCTING): New macro.
authorJason Merrill <merrill@gnu.org>
Wed, 13 Jul 1994 11:06:24 +0000 (11:06 +0000)
committerJason Merrill <merrill@gnu.org>
Wed, 13 Jul 1994 11:06:24 +0000 (11:06 +0000)
Wed Jul 13 03:30:36 1994  Jason Merrill  (jason@deneb.cygnus.com)

        * tree.h (TYPE_NEEDS_CONSTRUCTING): New macro.
        (tree_type): Add needs_constructing_flag.
        * function.c (assign_parms): If TYPE_NEEDS_CONSTRUCTING, pass by
        invisible reference.
        * calls.c (expand_call): Ditto.

From-SVN: r7758

gcc/calls.c
gcc/function.c
gcc/tree.h

index d3b21a9d0c09e1e758ffce764e0b50b015a001b8..f0350795bb1042b1ad82204a32ce316a8aa9c45a 100644 (file)
@@ -996,6 +996,7 @@ expand_call (exp, target, ignore)
       /* See if this argument should be passed by invisible reference.  */
       if ((TREE_CODE (TYPE_SIZE (type)) != INTEGER_CST
           && contains_placeholder_p (TYPE_SIZE (type)))
+         || TYPE_NEEDS_CONSTRUCTING (type)
 #ifdef FUNCTION_ARG_PASS_BY_REFERENCE
          || FUNCTION_ARG_PASS_BY_REFERENCE (args_so_far, TYPE_MODE (type),
                                             type, argpos < n_named_args)
index 16d4a935b83a3b376a56374f9a3d102c504b9b32..9f3339613c79ca993307b2bd394f3cf55cefe47f 100644 (file)
@@ -3157,6 +3157,7 @@ assign_parms (fndecl, second_time)
 
       if ((TREE_CODE (TYPE_SIZE (passed_type)) != INTEGER_CST
           && contains_placeholder_p (TYPE_SIZE (passed_type)))
+         || TYPE_NEEDS_CONSTRUCTING (passed_type)
 #ifdef FUNCTION_ARG_PASS_BY_REFERENCE
          || FUNCTION_ARG_PASS_BY_REFERENCE (args_so_far, passed_mode,
                                              passed_type, ! last_named)
index 616dedf65eb511d1e2234a8732c7880bf3f2c229..dbe5ff9cf5cadd8d1c1dc6a9a90238a5d182e0fc 100644 (file)
@@ -615,6 +615,10 @@ struct tree_block
    If set in a SET_TYPE, indicates a bitstring type. */
 #define TYPE_STRING_FLAG(NODE) ((NODE)->type.string_flag)
 
+/* Indicates that objects of this type must be initialized by calling a
+   function when they are created.  */
+#define TYPE_NEEDS_CONSTRUCTING(NODE) ((NODE)->type.needs_constructing_flag)
+
 struct tree_type
 {
   char common[sizeof (struct tree_common)];
@@ -632,6 +636,7 @@ struct tree_type
 
   unsigned string_flag : 1;
   unsigned no_force_blk_flag : 1;
+  unsigned needs_constructing_flag : 1;
   unsigned lang_flag_0 : 1;
   unsigned lang_flag_1 : 1;
   unsigned lang_flag_2 : 1;
@@ -639,7 +644,7 @@ struct tree_type
   unsigned lang_flag_4 : 1;
   unsigned lang_flag_5 : 1;
   unsigned lang_flag_6 : 1;
-  /* room for 7 more bits */
+  /* room for 6 more bits */
 
   unsigned int align;
   union tree_node *pointer_to;