PR middle-end/92622 - FAIL: gcc.dg/Warray-bounds-22.c on ILP32: missing warnings for VLA on lines 67 and 69

gcc/ChangeLog:

	PR middle-end/92622
	* tree-vrp.c (vrp_prop::check_array_ref): Avoid using a variable
	left uninitialized by get_addr_base_and_unit_offset ofn failure.

From-SVN: r279029
This commit is contained in:
Martin Sebor 2019-12-06 00:18:32 +00:00 committed by Martin Sebor
parent b801c7cd79
commit 37cd34543d
2 changed files with 22 additions and 14 deletions

View File

@ -1,3 +1,9 @@
2019-12-05 Martin Sebor <msebor@redhat.com>
PR middle-end/92622
* tree-vrp.c (vrp_prop::check_array_ref): Avoid using a variable
left uninitialized by get_addr_base_and_unit_offset on failure.
2019-12-05 Jan Hubicka <hubicka@ucw.cz>
* ipa-prop.c (ipa_set_jf_unknown): Do not clear bits and m_vr.
@ -1488,7 +1494,7 @@
(ipa_update_overall_fn_summary): Add RESET parameter.
* ipa-fnsummary.h (ipa_update_overall_fn_summary): Update prototype.
* ipa-inline-transform.c (inline_call): Enable incremental updates.
2019-11-20 Richard Sandiford <richard.sandiford@arm.com>
* tree-vect-slp.c (vect_schedule_slp_instance): Restore stmt

View File

@ -3516,7 +3516,6 @@ vrp_prop::check_array_ref (location_t location, tree ref,
tree ptrdiff_max = TYPE_MAX_VALUE (ptrdiff_type_node);
tree maxbound = ptrdiff_max;
tree arg = TREE_OPERAND (ref, 0);
poly_int64 off;
const bool compref = TREE_CODE (arg) == COMPONENT_REF;
if (compref)
@ -3535,19 +3534,22 @@ vrp_prop::check_array_ref (location_t location, tree ref,
size wouldn't necessarily be correct if the reference is
to its flexible array member initialized in a different
translation unit. */
tree base = get_addr_base_and_unit_offset (arg, &off);
if (!compref && base && DECL_P (base))
if (tree basesize = DECL_SIZE_UNIT (base))
if (TREE_CODE (basesize) == INTEGER_CST)
{
maxbound = basesize;
decl = base;
}
poly_int64 off;
if (tree base = get_addr_base_and_unit_offset (arg, &off))
{
if (!compref && DECL_P (base))
if (tree basesize = DECL_SIZE_UNIT (base))
if (TREE_CODE (basesize) == INTEGER_CST)
{
maxbound = basesize;
decl = base;
}
if (known_gt (off, 0))
maxbound = wide_int_to_tree (sizetype,
wi::sub (wi::to_wide (maxbound),
off));
if (known_gt (off, 0))
maxbound = wide_int_to_tree (sizetype,
wi::sub (wi::to_wide (maxbound),
off));
}
}
else
maxbound = fold_convert (sizetype, maxbound);