diff options
Diffstat (limited to 'gcc/tree-ssa-alias.cc')
-rw-r--r-- | gcc/tree-ssa-alias.cc | 18 |
1 files changed, 15 insertions, 3 deletions
diff --git a/gcc/tree-ssa-alias.cc b/gcc/tree-ssa-alias.cc index be7b597..1b404e0 100644 --- a/gcc/tree-ssa-alias.cc +++ b/gcc/tree-ssa-alias.cc @@ -2722,9 +2722,21 @@ check_fnspec (gcall *call, ao_ref *ref, bool clobber) t = TREE_CHAIN (t); size = TYPE_SIZE_UNIT (TREE_TYPE (TREE_VALUE (t))); } - ao_ref_init_from_ptr_and_size (&dref, - gimple_call_arg (call, i), - size); + poly_int64 size_hwi; + if (size + && poly_int_tree_p (size, &size_hwi) + && coeffs_in_range_p (size_hwi, 0, + HOST_WIDE_INT_MAX / BITS_PER_UNIT)) + { + size_hwi = size_hwi * BITS_PER_UNIT; + ao_ref_init_from_ptr_and_range (&dref, + gimple_call_arg (call, i), + true, 0, -1, size_hwi); + } + else + ao_ref_init_from_ptr_and_range (&dref, + gimple_call_arg (call, i), + false, 0, -1, -1); if (refs_may_alias_p_1 (&dref, ref, false)) return 1; } |