From: Ilya Enkovich Date: Tue, 27 Jan 2015 09:09:28 +0000 (+0000) Subject: tree-chkp.c (chkp_call_returns_bounds_p): Fix handling of bounds narrowing... X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=3dd598be88193ee087ab51312b5e464b2d6e2891;p=gcc.git 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 --- diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 05b5f74665c..5597e32b3f9 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,9 @@ +2015-01-27 Ilya Enkovich + + * 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 PR tree-optimization/64807 diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index f148ca15ed1..0686fa7caaa 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,7 @@ +2015-01-27 Ilya Enkovich + + * gcc.target/i386/chkp-narrow-bounds.c: New. + 2015-01-27 Jakub Jelinek 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 00000000000..28bc622570f --- /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 e7649effd97..b0a3a1547ff 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)