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 /gcc/tree-vrp.c | |
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
Diffstat (limited to 'gcc/tree-vrp.c')
-rw-r--r-- | gcc/tree-vrp.c | 30 |
1 files changed, 16 insertions, 14 deletions
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); |