aboutsummaryrefslogtreecommitdiff
path: root/gcc/tree-vrp.c
diff options
context:
space:
mode:
authorMartin Sebor <msebor@redhat.com>2019-12-06 00:18:32 +0000
committerMartin Sebor <msebor@gcc.gnu.org>2019-12-05 17:18:32 -0700
commit37cd34543d9e6407fe527b6fc7ba5dd55b61f33a (patch)
tree8a37cf90d314f0ce37673a0eae359a49b00d574c /gcc/tree-vrp.c
parentb801c7cd79f15e834d4cd6f5584d76459ecf7da0 (diff)
downloadgcc-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.c30
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);