diff options
author | Ilya Enkovich <enkovich.gnu@gmail.com> | 2015-06-18 10:09:22 +0000 |
---|---|---|
committer | Ilya Enkovich <ienkovich@gcc.gnu.org> | 2015-06-18 10:09:22 +0000 |
commit | 847ffe1718d3eac1a1e605686e8bb27b25969ef0 (patch) | |
tree | eba0ce1deaf12130f58e3a564eb43633841f6f11 /gcc | |
parent | cc63a7fac467b03b48491d45724fa0e38fb1e58a (diff) | |
download | gcc-847ffe1718d3eac1a1e605686e8bb27b25969ef0.zip gcc-847ffe1718d3eac1a1e605686e8bb27b25969ef0.tar.gz gcc-847ffe1718d3eac1a1e605686e8bb27b25969ef0.tar.bz2 |
re PR middle-end/66567 ([CHKP] internal compiler error: in assign_parms)
gcc/
PR middle-end/66567
* ipa-chkp.c (chkp_maybe_create_clone): Require
functions to be instrumentable.
* tree-chkp.c (chkp_replace_function_pointer): Use
chkp_instrumentable_p instead of attribute check.
gcc/testsuite/
PR middle-end/66567
* gcc.target/i386/mpx/pr66567.c: New test.
From-SVN: r224600
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/ChangeLog | 8 | ||||
-rw-r--r-- | gcc/ipa-chkp.c | 23 | ||||
-rw-r--r-- | gcc/testsuite/ChangeLog | 5 | ||||
-rw-r--r-- | gcc/testsuite/gcc.target/i386/mpx/pr66567.c | 16 | ||||
-rw-r--r-- | gcc/tree-chkp.c | 2 |
5 files changed, 34 insertions, 20 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 22b3325..335ec7d 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,11 @@ +2015-06-18 Ilya Enkovich <enkovich.gnu@gmail.com> + + PR middle-end/66567 + * ipa-chkp.c (chkp_maybe_create_clone): Require + functions to be instrumentable. + * tree-chkp.c (chkp_replace_function_pointer): Use + chkp_instrumentable_p instead of attribute check. + 2015-06-18 Richard Biener <rguenther@suse.de> PR tree-optimization/66510 diff --git a/gcc/ipa-chkp.c b/gcc/ipa-chkp.c index 181be9b..96f269c 100644 --- a/gcc/ipa-chkp.c +++ b/gcc/ipa-chkp.c @@ -563,25 +563,10 @@ chkp_maybe_create_clone (tree fndecl) if (gimple_has_body_p (fndecl)) { - /* If function will not be instrumented, then it's instrumented - version is a thunk for the original. */ - if (!chkp_instrumentable_p (fndecl)) - { - clone->remove_callees (); - clone->remove_all_references (); - clone->thunk.thunk_p = true; - clone->thunk.add_pointer_bounds_args = true; - clone->create_edge (node, NULL, 0, CGRAPH_FREQ_BASE); - /* Thunk shouldn't be a cdtor. */ - DECL_STATIC_CONSTRUCTOR (clone->decl) = 0; - DECL_STATIC_DESTRUCTOR (clone->decl) = 0; - } - else - { - tree_function_versioning (fndecl, new_decl, NULL, false, - NULL, false, NULL, NULL); - clone->lowered = true; - } + gcc_assert (chkp_instrumentable_p (fndecl)); + tree_function_versioning (fndecl, new_decl, NULL, false, + NULL, false, NULL, NULL); + clone->lowered = true; } /* New params are inserted after versioning because it diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 80727d1..95107ae 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2015-06-18 Ilya Enkovich <enkovich.gnu@gmail.com> + + PR middle-end/66567 + * gcc.target/i386/mpx/pr66567.c: New test. + 2015-06-18 Richard Biener <rguenther@suse.de> PR tree-optimization/66510 diff --git a/gcc/testsuite/gcc.target/i386/mpx/pr66567.c b/gcc/testsuite/gcc.target/i386/mpx/pr66567.c new file mode 100644 index 0000000..5a7e2f2 --- /dev/null +++ b/gcc/testsuite/gcc.target/i386/mpx/pr66567.c @@ -0,0 +1,16 @@ +/* { dg-do compile } */ +/* { dg-options "-fcheck-pointer-bounds -mmpx" } */ + +void (*b) (); + +void fn1 (const int *p1) +{ + static void *a = &&conv_1234_123C; + conv_1234_123C: + ; +} + +void fn2 () +{ + b = fn1; +} diff --git a/gcc/tree-chkp.c b/gcc/tree-chkp.c index bee63cd..ed734e6 100644 --- a/gcc/tree-chkp.c +++ b/gcc/tree-chkp.c @@ -4088,7 +4088,7 @@ chkp_replace_function_pointer (tree *op, int *walk_subtrees, void *data ATTRIBUTE_UNUSED) { if (TREE_CODE (*op) == FUNCTION_DECL - && !lookup_attribute ("bnd_legacy", DECL_ATTRIBUTES (*op)) + && chkp_instrumentable_p (*op) && (DECL_BUILT_IN_CLASS (*op) == NOT_BUILT_IN /* For builtins we replace pointers only for selected function and functions having definitions. */ |