aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorIlya Enkovich <ilya.enkovich@intel.com>2015-01-27 09:09:28 +0000
committerIlya Enkovich <ienkovich@gcc.gnu.org>2015-01-27 09:09:28 +0000
commit3dd598be88193ee087ab51312b5e464b2d6e2891 (patch)
treea2bf30768dbb9420eeae351f01e4395ac6b1b049 /gcc
parentb30ea1387f8e26ad60bd4d71ba2006ea7e11a6ee (diff)
downloadgcc-3dd598be88193ee087ab51312b5e464b2d6e2891.zip
gcc-3dd598be88193ee087ab51312b5e464b2d6e2891.tar.gz
gcc-3dd598be88193ee087ab51312b5e464b2d6e2891.tar.bz2
tree-chkp.c (chkp_call_returns_bounds_p): Fix handling of bounds narrowing...
gcc/ * tree-chkp.c (chkp_call_returns_bounds_p): Fix handling of bounds narrowing, already instrumented calls and calls to not instrumentable functions. gcc/testsuite/ * gcc.target/i386/chkp-narrow-bounds.c: New. From-SVN: r220154
Diffstat (limited to 'gcc')
-rw-r--r--gcc/ChangeLog6
-rw-r--r--gcc/testsuite/ChangeLog4
-rw-r--r--gcc/testsuite/gcc.target/i386/chkp-narrow-bounds.c13
-rw-r--r--gcc/tree-chkp.c10
4 files changed, 31 insertions, 2 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 05b5f74..5597e32 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,9 @@
+2015-01-27 Ilya Enkovich <ilya.enkovich@intel.com>
+
+ * tree-chkp.c (chkp_call_returns_bounds_p): Fix handling of
+ bounds narrowing, already instrumented calls and calls to
+ not instrumentable functions.
+
2015-01-27 Jakub Jelinek <jakub@redhat.com>
PR tree-optimization/64807
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index f148ca1..0686fa7 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,3 +1,7 @@
+2015-01-27 Ilya Enkovich <ilya.enkovich@intel.com>
+
+ * gcc.target/i386/chkp-narrow-bounds.c: New.
+
2015-01-27 Jakub Jelinek <jakub@redhat.com>
PR tree-optimization/64807
diff --git a/gcc/testsuite/gcc.target/i386/chkp-narrow-bounds.c b/gcc/testsuite/gcc.target/i386/chkp-narrow-bounds.c
new file mode 100644
index 0000000..28bc622
--- /dev/null
+++ b/gcc/testsuite/gcc.target/i386/chkp-narrow-bounds.c
@@ -0,0 +1,13 @@
+/* { dg-do compile } */
+/* { dg-require-effective-target mpx } */
+/* { dg-options "-fcheck-pointer-bounds -mmpx -O2 -fdump-tree-chkp" } */
+/* { dg-final { scan-tree-dump "bndcl" "chkp" } } */
+/* { dg-final { scan-tree-dump "bndcu" "chkp" } } */
+/* { dg-final { cleanup-tree-dump "chkp" } } */
+
+int
+test (int *p)
+{
+ int *p1 = __bnd_narrow_ptr_bounds (p - 10, p, sizeof (int) * 20);
+ return p1[10];
+}
diff --git a/gcc/tree-chkp.c b/gcc/tree-chkp.c
index e7649ef..b0a3a15 100644
--- a/gcc/tree-chkp.c
+++ b/gcc/tree-chkp.c
@@ -2113,13 +2113,19 @@ chkp_call_returns_bounds_p (gcall *call)
if (gimple_call_internal_p (call))
return false;
+ if (gimple_call_builtin_p (call, BUILT_IN_CHKP_NARROW_PTR_BOUNDS)
+ || chkp_gimple_call_builtin_p (call, BUILT_IN_CHKP_NARROW))
+ return true;
+
+ if (gimple_call_with_bounds_p (call))
+ return true;
+
tree fndecl = gimple_call_fndecl (call);
if (fndecl && DECL_BUILT_IN_CLASS (fndecl) == BUILT_IN_MD)
return false;
- if (fndecl
- && lookup_attribute ("bnd_legacy", DECL_ATTRIBUTES (fndecl)))
+ if (fndecl && !chkp_instrumentable_p (fndecl))
return false;
if (fndecl && DECL_BUILT_IN_CLASS (fndecl) == BUILT_IN_NORMAL)