diff options
author | Jason Merrill <merrill@gnu.org> | 1994-07-13 11:06:24 +0000 |
---|---|---|
committer | Jason Merrill <merrill@gnu.org> | 1994-07-13 11:06:24 +0000 |
commit | 4ac3d9940723c5fbfadfec01ce011f0d26ca7d82 (patch) | |
tree | 19118b383753d9b6a0648d09b2be1639de926e11 /gcc | |
parent | ccccb5276489b12554c8fbcaca49c0d988b3e8f8 (diff) | |
download | gcc-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.c | 1 | ||||
-rw-r--r-- | gcc/function.c | 1 | ||||
-rw-r--r-- | gcc/tree.h | 7 |
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) @@ -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; |