diff options
author | Jakub Jelinek <jakub@redhat.com> | 2017-06-20 09:22:31 +0200 |
---|---|---|
committer | Jakub Jelinek <jakub@gcc.gnu.org> | 2017-06-20 09:22:31 +0200 |
commit | 0e36bb52a85446a759c7f7131048db1ca3236eb7 (patch) | |
tree | 182efc32b0d7529728afe5d30ab41153d27681c3 /gcc | |
parent | cb6794f6312a07b2d044677e0adb0667e860197d (diff) | |
download | gcc-0e36bb52a85446a759c7f7131048db1ca3236eb7.zip gcc-0e36bb52a85446a759c7f7131048db1ca3236eb7.tar.gz gcc-0e36bb52a85446a759c7f7131048db1ca3236eb7.tar.bz2 |
tree-chkp.c (chkp_get_hard_register_var_fake_base_address): Rewritten to avoid overflow for > 32-bit pointers.
* tree-chkp.c (chkp_get_hard_register_var_fake_base_address):
Rewritten to avoid overflow for > 32-bit pointers.
From-SVN: r249398
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/ChangeLog | 5 | ||||
-rw-r--r-- | gcc/tree-chkp.c | 5 |
2 files changed, 6 insertions, 4 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 331e1a4..d46daf3 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,4 +1,7 @@ -2017-06-20 Jakub Jelinek <jakub@redhat.com> +2017-07-20 Jakub Jelinek <jakub@redhat.com> + + * tree-chkp.c (chkp_get_hard_register_var_fake_base_address): + Rewritten to avoid overflow for > 32-bit pointers. PR sanitizer/81125 * ubsan.h (ubsan_encode_value): Workaround buggy clang++ parser diff --git a/gcc/tree-chkp.c b/gcc/tree-chkp.c index ecac901..e241f50 100644 --- a/gcc/tree-chkp.c +++ b/gcc/tree-chkp.c @@ -690,9 +690,8 @@ chkp_erase_completed_bounds (void) static tree chkp_get_hard_register_var_fake_base_address () { - tree base = fold_convert (ptr_type_node, integer_zero_node); - unsigned HOST_WIDE_INT offset = 1 << (TYPE_PRECISION (ptr_type_node) - 1); - return fold_build_pointer_plus_hwi (base, offset); + int prec = TYPE_PRECISION (ptr_type_node); + return wide_int_to_tree (ptr_type_node, wi::min_value (prec, SIGNED)); } /* If we check bounds for a hard register variable, we cannot |