aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJakub Jelinek <jakub@redhat.com>2019-09-06 19:33:41 +0200
committerJakub Jelinek <jakub@gcc.gnu.org>2019-09-06 19:33:41 +0200
commit920ea3b8ba3164b61ac9490dfdfceb6936eda6dd (patch)
tree1f4f0d8643503903630690489d6837dbeb9fcd79
parent28d67c175f335ac01ddc8d659986a34b281b02e9 (diff)
downloadgcc-920ea3b8ba3164b61ac9490dfdfceb6936eda6dd.zip
gcc-920ea3b8ba3164b61ac9490dfdfceb6936eda6dd.tar.gz
gcc-920ea3b8ba3164b61ac9490dfdfceb6936eda6dd.tar.bz2
function.c (assign_parm_find_data_types): Use RECORD_OR_UNION_TYPE_P before testing TYPE_TRANSPARENT_AGGR.
* function.c (assign_parm_find_data_types): Use RECORD_OR_UNION_TYPE_P before testing TYPE_TRANSPARENT_AGGR. * calls.c (initialize_argument_information, load_register_parameters): Likewise. From-SVN: r275472
-rw-r--r--gcc/ChangeLog7
-rw-r--r--gcc/calls.c7
-rw-r--r--gcc/function.c3
3 files changed, 10 insertions, 7 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 65d9f43..7d5a272 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,10 @@
+2019-09-06 Jakub Jelinek <jakub@redhat.com>
+
+ * function.c (assign_parm_find_data_types): Use RECORD_OR_UNION_TYPE_P
+ before testing TYPE_TRANSPARENT_AGGR.
+ * calls.c (initialize_argument_information, load_register_parameters):
+ Likewise.
+
2019-09-06 Richard Earnshaw <rearnsha@arm.com>
* config/arm/arm.md (cmp_and): Add short-it variant for thumb2 with
diff --git a/gcc/calls.c b/gcc/calls.c
index e5086f4..51ad55f 100644
--- a/gcc/calls.c
+++ b/gcc/calls.c
@@ -1991,8 +1991,7 @@ initialize_argument_information (int num_actuals ATTRIBUTE_UNUSED,
/* 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))
+ if (RECORD_OR_UNION_TYPE_P (type) && TYPE_TRANSPARENT_AGGR (type))
type = TREE_TYPE (first_field (type));
/* Decide where to pass this arg.
@@ -2772,9 +2771,7 @@ load_register_parameters (struct arg_data *args, int num_actuals,
HOST_WIDE_INT const_size = 0;
rtx_insn *before_arg = get_last_insn ();
tree type = TREE_TYPE (args[i].tree_value);
- if ((TREE_CODE (type) == UNION_TYPE
- || TREE_CODE (type) == RECORD_TYPE)
- && TYPE_TRANSPARENT_AGGR (type))
+ if (RECORD_OR_UNION_TYPE_P (type) && TYPE_TRANSPARENT_AGGR (type))
type = TREE_TYPE (first_field (type));
/* Set non-negative if we must move a word at a time, even if
just one word (e.g, partial == 4 && mode == DFmode). Set
diff --git a/gcc/function.c b/gcc/function.c
index 751d2de3..5351605 100644
--- a/gcc/function.c
+++ b/gcc/function.c
@@ -2443,8 +2443,7 @@ assign_parm_find_data_types (struct assign_parm_data_all *all, tree parm,
/* If the parm is to be passed as a transparent union or record, use the
type of the first field for the tests below. We have already verified
that the modes are the same. */
- if ((TREE_CODE (data->arg.type) == UNION_TYPE
- || TREE_CODE (data->arg.type) == RECORD_TYPE)
+ if (RECORD_OR_UNION_TYPE_P (data->arg.type)
&& TYPE_TRANSPARENT_AGGR (data->arg.type))
data->arg.type = TREE_TYPE (first_field (data->arg.type));