diff options
author | Martin Sebor <msebor@redhat.com> | 2019-12-06 00:18:32 +0000 |
---|---|---|
committer | Martin Sebor <msebor@gcc.gnu.org> | 2019-12-05 17:18:32 -0700 |
commit | 37cd34543d9e6407fe527b6fc7ba5dd55b61f33a (patch) | |
tree | 8a37cf90d314f0ce37673a0eae359a49b00d574c | |
parent | b801c7cd79f15e834d4cd6f5584d76459ecf7da0 (diff) | |
download | gcc-37cd34543d9e6407fe527b6fc7ba5dd55b61f33a.zip gcc-37cd34543d9e6407fe527b6fc7ba5dd55b61f33a.tar.gz gcc-37cd34543d9e6407fe527b6fc7ba5dd55b61f33a.tar.bz2 |
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
-rw-r--r-- | gcc/ChangeLog | 8 | ||||
-rw-r--r-- | gcc/tree-vrp.c | 30 |
2 files changed, 23 insertions, 15 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index ba64864..31b03ff 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -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 diff --git a/gcc/tree-vrp.c b/gcc/tree-vrp.c index bbcf237..cce6315 100644 --- a/gcc/tree-vrp.c +++ b/gcc/tree-vrp.c @@ -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; - } - - if (known_gt (off, 0)) - maxbound = wide_int_to_tree (sizetype, - wi::sub (wi::to_wide (maxbound), - off)); + 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)); + } } else maxbound = fold_convert (sizetype, maxbound); |