aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorJakub Jelinek <jakub@redhat.com>2017-06-20 09:22:31 +0200
committerJakub Jelinek <jakub@gcc.gnu.org>2017-06-20 09:22:31 +0200
commit0e36bb52a85446a759c7f7131048db1ca3236eb7 (patch)
tree182efc32b0d7529728afe5d30ab41153d27681c3 /gcc
parentcb6794f6312a07b2d044677e0adb0667e860197d (diff)
downloadgcc-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/ChangeLog5
-rw-r--r--gcc/tree-chkp.c5
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