diff options
author | Janis Johnson <janis187@us.ibm.com> | 2010-01-21 05:49:35 +0000 |
---|---|---|
committer | Jason Merrill <jason@gcc.gnu.org> | 2010-01-21 00:49:35 -0500 |
commit | ebf0bf7f49c75c98d4c51e8c451eae068a2dd647 (patch) | |
tree | 3bec735a0f06546a748f8a6b206f44f1a8b31297 /gcc/calls.c | |
parent | 907c6efdbc255042ab1ece9179511b78f426cb00 (diff) | |
download | gcc-ebf0bf7f49c75c98d4c51e8c451eae068a2dd647.zip gcc-ebf0bf7f49c75c98d4c51e8c451eae068a2dd647.tar.gz gcc-ebf0bf7f49c75c98d4c51e8c451eae068a2dd647.tar.bz2 |
tree.h (TYPE_TRANSPARENT_UNION): Replace with ...
* tree.h (TYPE_TRANSPARENT_UNION): Replace with ...
(TYPE_TRANSPARENT_AGGR): this, for union and record.
* calls.c (initialize argument_information): Handle it.
* c-common.c (handle_transparent_union_attribute): Use new name.
* c-decl.c (finish_struct): Ditto.
* c-typeck.c (type_lists_compatible_p): Ditto.
(convert_for_assignment): Use new name and also handle record.
* function.c (aggregate_value_p): Handle it.
(pass_by_reference): Ditto.
(assign_parm_data_types): Ditto.
* print-tree.c (print_node): Ditto.
* lto-streamer-in.c (unpack_ts_type_value_fields): Ditto.
* lto-streamer-out.c (pack_ts_type_value_fields): Ditto.
* tree.c (first_field): New fn.
gcc/cp/
* mangle.c (write_type): Mangle transparent record as member type.
* semantics.c (begin_class_definition): Recognize decimal classes
and set TYPE_TRANSPARENT_AGGR.
Co-Authored-By: Jason Merrill <jason@redhat.com>
From-SVN: r156106
Diffstat (limited to 'gcc/calls.c')
-rw-r--r-- | gcc/calls.c | 11 |
1 files changed, 6 insertions, 5 deletions
diff --git a/gcc/calls.c b/gcc/calls.c index fe4bf0d..ce54bbe 100644 --- a/gcc/calls.c +++ b/gcc/calls.c @@ -1010,11 +1010,12 @@ initialize_argument_information (int num_actuals ATTRIBUTE_UNUSED, if (type == error_mark_node || !COMPLETE_TYPE_P (type)) args[i].tree_value = integer_zero_node, type = integer_type_node; - /* If TYPE is a transparent union, pass things the way we would - pass the first field of the union. We have already verified that - the modes are the same. */ - if (TREE_CODE (type) == UNION_TYPE && TYPE_TRANSPARENT_UNION (type)) - type = TREE_TYPE (TYPE_FIELDS (type)); + /* If TYPE is a transparent union or record, pass things the way + we would pass the first field of the union or record. We have + already verified that the modes are the same. */ + if ((TREE_CODE (type) == UNION_TYPE || TREE_CODE (type) == RECORD_TYPE) + && TYPE_TRANSPARENT_AGGR (type)) + type = TREE_TYPE (first_field (type)); /* Decide where to pass this arg. |