aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorJason Merrill <merrill@gnu.org>1994-07-13 11:06:24 +0000
committerJason Merrill <merrill@gnu.org>1994-07-13 11:06:24 +0000
commit4ac3d9940723c5fbfadfec01ce011f0d26ca7d82 (patch)
tree19118b383753d9b6a0648d09b2be1639de926e11 /gcc
parentccccb5276489b12554c8fbcaca49c0d988b3e8f8 (diff)
downloadgcc-4ac3d9940723c5fbfadfec01ce011f0d26ca7d82.zip
gcc-4ac3d9940723c5fbfadfec01ce011f0d26ca7d82.tar.gz
gcc-4ac3d9940723c5fbfadfec01ce011f0d26ca7d82.tar.bz2
tree.h (TYPE_NEEDS_CONSTRUCTING): New macro.
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
Diffstat (limited to 'gcc')
-rw-r--r--gcc/calls.c1
-rw-r--r--gcc/function.c1
-rw-r--r--gcc/tree.h7
3 files changed, 8 insertions, 1 deletions
diff --git a/gcc/calls.c b/gcc/calls.c
index d3b21a9..f035079 100644
--- a/gcc/calls.c
+++ b/gcc/calls.c
@@ -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)
diff --git a/gcc/function.c b/gcc/function.c
index 16d4a93..9f33396 100644
--- a/gcc/function.c
+++ b/gcc/function.c
@@ -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)
diff --git a/gcc/tree.h b/gcc/tree.h
index 616dedf..dbe5ff9 100644
--- a/gcc/tree.h
+++ b/gcc/tree.h
@@ -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;