This is the mail archive of the
gcc-patches@gcc.gnu.org
mailing list for the GCC project.
[01/10] Expand COMPLETE_TYPE_P in obvious checks for null
- From: Richard Sandiford <richard dot sandiford at arm dot com>
- To: gcc-patches at gcc dot gnu dot org
- Cc: joseph at codesourcery dot com, jason at redhat dot com, nathan at acm dot org, nd at arm dot com
- Date: Mon, 15 Oct 2018 15:31:19 +0100
- Subject: [01/10] Expand COMPLETE_TYPE_P in obvious checks for null
- References: <87d0sbjn97.fsf@arm.com>
Some tests for COMPLETE_TYPE_P are just protecting against a null
TYPE_SIZE or TYPE_SIZE_UNIT. Rather than replace them with a new
macro, it seemed clearer to write out the underlying test.
2018-10-15 Richard Sandiford <richard.sandiford@arm.com>
gcc/
* calls.c (initialize_argument_information): Replace COMPLETE_TYPE_P
with checks for null.
* config/aarch64/aarch64.c (aapcs_vfp_sub_candidate): Likewise.
* config/arm/arm.c (aapcs_vfp_sub_candidate): Likewise.
* config/powerpcspe/powerpcspe.c (rs6000_aggregate_candidate):
Likewise.
* config/riscv/riscv.c (riscv_flatten_aggregate_field): Likewise.
* config/rs6000/rs6000.c (rs6000_aggregate_candidate): Likewise.
* expr.c (expand_assignment, safe_from_p): Likewise.
(expand_expr_real_1): Likewise.
* tree-data-ref.c (initialize_data_dependence_relation): Likewise.
* tree-sra.c (maybe_add_sra_candidate): Likewise.
(find_param_candidates): Likewise.
* tree-ssa-alias.c (indirect_ref_may_alias_decl_p): Likewise.
* tree-vrp.c (vrp_prop::check_mem_ref): Likewise.
gcc/lto/
* lto-symtab.c (warn_type_compatibility_p): Likewise.
Index: gcc/calls.c
===================================================================
--- gcc/calls.c 2018-10-05 13:46:11.115788209 +0100
+++ gcc/calls.c 2018-10-15 14:12:54.016553288 +0100
@@ -2039,7 +2039,7 @@ initialize_argument_information (int num
function being called. */
rtx copy;
- if (!COMPLETE_TYPE_P (type)
+ if (!TYPE_SIZE_UNIT (type)
|| TREE_CODE (TYPE_SIZE_UNIT (type)) != INTEGER_CST
|| (flag_stack_check == GENERIC_STACK_CHECK
&& compare_tree_int (TYPE_SIZE_UNIT (type),
Index: gcc/config/aarch64/aarch64.c
===================================================================
--- gcc/config/aarch64/aarch64.c 2018-10-15 14:08:45.970608817 +0100
+++ gcc/config/aarch64/aarch64.c 2018-10-15 14:12:54.020553256 +0100
@@ -13000,7 +13000,7 @@ aapcs_vfp_sub_candidate (const_tree type
/* Can't handle incomplete types nor sizes that are not
fixed. */
- if (!COMPLETE_TYPE_P (type)
+ if (!TYPE_SIZE (type)
|| TREE_CODE (TYPE_SIZE (type)) != INTEGER_CST)
return -1;
@@ -13033,7 +13033,7 @@ aapcs_vfp_sub_candidate (const_tree type
/* Can't handle incomplete types nor sizes that are not
fixed. */
- if (!COMPLETE_TYPE_P (type)
+ if (!TYPE_SIZE (type)
|| TREE_CODE (TYPE_SIZE (type)) != INTEGER_CST)
return -1;
@@ -13066,7 +13066,7 @@ aapcs_vfp_sub_candidate (const_tree type
/* Can't handle incomplete types nor sizes that are not
fixed. */
- if (!COMPLETE_TYPE_P (type)
+ if (!TYPE_SIZE (type)
|| TREE_CODE (TYPE_SIZE (type)) != INTEGER_CST)
return -1;
Index: gcc/config/arm/arm.c
===================================================================
--- gcc/config/arm/arm.c 2018-10-05 13:46:14.375761802 +0100
+++ gcc/config/arm/arm.c 2018-10-15 14:12:54.024553222 +0100
@@ -5927,7 +5927,7 @@ aapcs_vfp_sub_candidate (const_tree type
/* Can't handle incomplete types nor sizes that are not
fixed. */
- if (!COMPLETE_TYPE_P (type)
+ if (!TYPE_SIZE (type)
|| TREE_CODE (TYPE_SIZE (type)) != INTEGER_CST)
return -1;
@@ -5960,7 +5960,7 @@ aapcs_vfp_sub_candidate (const_tree type
/* Can't handle incomplete types nor sizes that are not
fixed. */
- if (!COMPLETE_TYPE_P (type)
+ if (!TYPE_SIZE (type)
|| TREE_CODE (TYPE_SIZE (type)) != INTEGER_CST)
return -1;
@@ -5993,7 +5993,7 @@ aapcs_vfp_sub_candidate (const_tree type
/* Can't handle incomplete types nor sizes that are not
fixed. */
- if (!COMPLETE_TYPE_P (type)
+ if (!TYPE_SIZE (type)
|| TREE_CODE (TYPE_SIZE (type)) != INTEGER_CST)
return -1;
Index: gcc/config/powerpcspe/powerpcspe.c
===================================================================
--- gcc/config/powerpcspe/powerpcspe.c 2018-10-05 13:46:13.855766014 +0100
+++ gcc/config/powerpcspe/powerpcspe.c 2018-10-15 14:12:54.032553156 +0100
@@ -11540,7 +11540,7 @@ rs6000_aggregate_candidate (const_tree t
/* Can't handle incomplete types nor sizes that are not
fixed. */
- if (!COMPLETE_TYPE_P (type)
+ if (!TYPE_SIZE (type)
|| TREE_CODE (TYPE_SIZE (type)) != INTEGER_CST)
return -1;
@@ -11573,7 +11573,7 @@ rs6000_aggregate_candidate (const_tree t
/* Can't handle incomplete types nor sizes that are not
fixed. */
- if (!COMPLETE_TYPE_P (type)
+ if (!TYPE_SIZE (type)
|| TREE_CODE (TYPE_SIZE (type)) != INTEGER_CST)
return -1;
@@ -11606,7 +11606,7 @@ rs6000_aggregate_candidate (const_tree t
/* Can't handle incomplete types nor sizes that are not
fixed. */
- if (!COMPLETE_TYPE_P (type)
+ if (!TYPE_SIZE (type)
|| TREE_CODE (TYPE_SIZE (type)) != INTEGER_CST)
return -1;
Index: gcc/config/riscv/riscv.c
===================================================================
--- gcc/config/riscv/riscv.c 2018-10-05 13:46:13.879765820 +0100
+++ gcc/config/riscv/riscv.c 2018-10-15 14:12:54.032553156 +0100
@@ -2290,7 +2290,7 @@ riscv_flatten_aggregate_field (const_tre
{
case RECORD_TYPE:
/* Can't handle incomplete types nor sizes that are not fixed. */
- if (!COMPLETE_TYPE_P (type)
+ if (!TYPE_SIZE (type)
|| TREE_CODE (TYPE_SIZE (type)) != INTEGER_CST
|| !tree_fits_uhwi_p (TYPE_SIZE (type)))
return -1;
@@ -2319,7 +2319,7 @@ riscv_flatten_aggregate_field (const_tre
/* Can't handle incomplete types nor sizes that are not fixed. */
if (n_subfields <= 0
- || !COMPLETE_TYPE_P (type)
+ || !TYPE_SIZE (type)
|| TREE_CODE (TYPE_SIZE (type)) != INTEGER_CST
|| !index
|| !TYPE_MAX_VALUE (index)
Index: gcc/config/rs6000/rs6000.c
===================================================================
--- gcc/config/rs6000/rs6000.c 2018-10-15 14:08:45.994608617 +0100
+++ gcc/config/rs6000/rs6000.c 2018-10-15 14:12:54.040553089 +0100
@@ -10386,7 +10386,7 @@ rs6000_aggregate_candidate (const_tree t
/* Can't handle incomplete types nor sizes that are not
fixed. */
- if (!COMPLETE_TYPE_P (type)
+ if (!TYPE_SIZE (type)
|| TREE_CODE (TYPE_SIZE (type)) != INTEGER_CST)
return -1;
@@ -10419,7 +10419,7 @@ rs6000_aggregate_candidate (const_tree t
/* Can't handle incomplete types nor sizes that are not
fixed. */
- if (!COMPLETE_TYPE_P (type)
+ if (!TYPE_SIZE (type)
|| TREE_CODE (TYPE_SIZE (type)) != INTEGER_CST)
return -1;
@@ -10452,7 +10452,7 @@ rs6000_aggregate_candidate (const_tree t
/* Can't handle incomplete types nor sizes that are not
fixed. */
- if (!COMPLETE_TYPE_P (type)
+ if (!TYPE_SIZE (type)
|| TREE_CODE (TYPE_SIZE (type)) != INTEGER_CST)
return -1;
Index: gcc/expr.c
===================================================================
--- gcc/expr.c 2018-10-05 13:46:10.003797217 +0100
+++ gcc/expr.c 2018-10-15 14:12:54.040553089 +0100
@@ -5300,7 +5300,7 @@ expand_assignment (tree to, tree from, b
needs to be done. Handling this in the normal way is safe because no
computation is done before the call. The same is true for SSA names. */
if (TREE_CODE (from) == CALL_EXPR && ! aggregate_value_p (from, from)
- && COMPLETE_TYPE_P (TREE_TYPE (from))
+ && TYPE_SIZE (TREE_TYPE (from))
&& TREE_CODE (TYPE_SIZE (TREE_TYPE (from))) == INTEGER_CST
&& ! (((VAR_P (to)
|| TREE_CODE (to) == PARM_DECL
@@ -7518,7 +7518,9 @@ safe_from_p (const_rtx x, tree exp, int
So we assume here that something at a higher level has prevented a
clash. This is somewhat bogus, but the best we can do. Only
do this when X is BLKmode and when we are at the top level. */
- || (top_p && TREE_TYPE (exp) != 0 && COMPLETE_TYPE_P (TREE_TYPE (exp))
+ || (top_p
+ && TREE_TYPE (exp) != 0
+ && TYPE_SIZE (TREE_TYPE (exp))
&& TREE_CODE (TYPE_SIZE (TREE_TYPE (exp))) != INTEGER_CST
&& (TREE_CODE (TREE_TYPE (exp)) != ARRAY_TYPE
|| TYPE_ARRAY_MAX_SIZE (TREE_TYPE (exp)) == NULL_TREE
@@ -10523,7 +10525,7 @@ expand_expr_real_1 (tree exp, rtx target
orig_op0 = op0
= expand_expr_real (tem,
(TREE_CODE (TREE_TYPE (tem)) == UNION_TYPE
- && COMPLETE_TYPE_P (TREE_TYPE (tem))
+ && TYPE_SIZE (TREE_TYPE (tem))
&& (TREE_CODE (TYPE_SIZE (TREE_TYPE (tem)))
!= INTEGER_CST)
&& modifier != EXPAND_STACK_PARM
Index: gcc/tree-data-ref.c
===================================================================
--- gcc/tree-data-ref.c 2018-10-05 13:46:11.115788209 +0100
+++ gcc/tree-data-ref.c 2018-10-15 14:12:54.040553089 +0100
@@ -2487,8 +2487,8 @@ initialize_data_dependence_relation (str
}
/* Try to approach equal type sizes. */
- if (!COMPLETE_TYPE_P (type_a)
- || !COMPLETE_TYPE_P (type_b)
+ if (!TYPE_SIZE_UNIT (type_a)
+ || !TYPE_SIZE_UNIT (type_b)
|| !tree_fits_uhwi_p (TYPE_SIZE_UNIT (type_a))
|| !tree_fits_uhwi_p (TYPE_SIZE_UNIT (type_b)))
break;
Index: gcc/tree-sra.c
===================================================================
--- gcc/tree-sra.c 2018-08-28 11:25:46.034881666 +0100
+++ gcc/tree-sra.c 2018-10-15 14:12:54.040553089 +0100
@@ -1988,9 +1988,9 @@ maybe_add_sra_candidate (tree var)
reject (var, "is volatile");
return false;
}
- if (!COMPLETE_TYPE_P (type))
+ if (!TYPE_SIZE (type))
{
- reject (var, "has incomplete type");
+ reject (var, "type size unknown");
return false;
}
if (!tree_fits_uhwi_p (TYPE_SIZE (type)))
@@ -4176,7 +4176,7 @@ find_param_candidates (void)
else if (!AGGREGATE_TYPE_P (type))
continue;
- if (!COMPLETE_TYPE_P (type)
+ if (!TYPE_SIZE (type)
|| !tree_fits_uhwi_p (TYPE_SIZE (type))
|| tree_to_uhwi (TYPE_SIZE (type)) == 0
|| (AGGREGATE_TYPE_P (type)
Index: gcc/tree-ssa-alias.c
===================================================================
--- gcc/tree-ssa-alias.c 2018-09-10 17:38:19.470814110 +0100
+++ gcc/tree-ssa-alias.c 2018-10-15 14:12:54.040553089 +0100
@@ -1182,7 +1182,8 @@ indirect_ref_may_alias_decl_p (tree ref1
/* If the size of the access relevant for TBAA through the pointer
is bigger than the size of the decl we can't possibly access the
decl via that pointer. */
- if (DECL_SIZE (base2) && COMPLETE_TYPE_P (TREE_TYPE (ptrtype1))
+ if (DECL_SIZE (base2)
+ && TYPE_SIZE (TREE_TYPE (ptrtype1))
&& poly_int_tree_p (DECL_SIZE (base2))
&& poly_int_tree_p (TYPE_SIZE (TREE_TYPE (ptrtype1)))
/* ??? This in turn may run afoul when a decl of type T which is
Index: gcc/tree-vrp.c
===================================================================
--- gcc/tree-vrp.c 2018-10-05 13:46:08.215811700 +0100
+++ gcc/tree-vrp.c 2018-10-15 14:12:54.044553056 +0100
@@ -4412,7 +4412,7 @@ vrp_prop::check_mem_ref (location_t loca
not known. */
tree reftype = TREE_TYPE (arg);
if (POINTER_TYPE_P (reftype)
- || !COMPLETE_TYPE_P (reftype)
+ || !TYPE_SIZE_UNIT (reftype)
|| TREE_CODE (TYPE_SIZE_UNIT (reftype)) != INTEGER_CST
|| RECORD_OR_UNION_TYPE_P (reftype))
return;
Index: gcc/lto/lto-symtab.c
===================================================================
--- gcc/lto/lto-symtab.c 2018-08-28 11:25:46.034881666 +0100
+++ gcc/lto/lto-symtab.c 2018-10-15 14:12:54.040553089 +0100
@@ -243,8 +243,8 @@ warn_type_compatibility_p (tree prevaili
/* We can not use types_compatible_p because we permit some changes
across types. For example unsigned size_t and "signed size_t" may be
compatible when merging C and Fortran types. */
- if (COMPLETE_TYPE_P (prevailing_type)
- && COMPLETE_TYPE_P (type)
+ if (TYPE_SIZE (type)
+ && TYPE_SIZE (prevailing_type)
/* While global declarations are never variadic, we can recurse here
for function parameter types. */
&& TREE_CODE (TYPE_SIZE (type)) == INTEGER_CST