function.c (assign_parm_find_data_types): Use RECORD_OR_UNION_TYPE_P before testing...
authorJakub Jelinek <jakub@redhat.com>
Fri, 6 Sep 2019 17:33:41 +0000 (19:33 +0200)
committerJakub Jelinek <jakub@gcc.gnu.org>
Fri, 6 Sep 2019 17:33:41 +0000 (19:33 +0200)
* 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

gcc/ChangeLog
gcc/calls.c
gcc/function.c

index 65d9f43db7fe003f0eae401398b2a0b58e9f7fff..7d5a2721786dc06b9e4804f00b8f895e61d382eb 100644 (file)
@@ -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
index e5086f4bb1d0bdab98cee75a21fe275ad01e23bf..51ad55f15a97aab1e81ba1a3b52cd621bf8cd6db 100644 (file)
@@ -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
index 751d2de3bfd8ed81b6a1679338e5fe670c37d577..535160544b95da4203530e7694243f78e4eb732c 100644 (file)
@@ -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));