From 847ffe1718d3eac1a1e605686e8bb27b25969ef0 Mon Sep 17 00:00:00 2001 From: Ilya Enkovich Date: Thu, 18 Jun 2015 10:09:22 +0000 Subject: [PATCH] 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 --- gcc/ChangeLog | 8 +++++++ gcc/ipa-chkp.c | 23 ++++----------------- gcc/testsuite/ChangeLog | 5 +++++ gcc/testsuite/gcc.target/i386/mpx/pr66567.c | 16 ++++++++++++++ gcc/tree-chkp.c | 2 +- 5 files changed, 34 insertions(+), 20 deletions(-) create mode 100644 gcc/testsuite/gcc.target/i386/mpx/pr66567.c diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 22b3325ffff..335ec7dbddc 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,11 @@ +2015-06-18 Ilya Enkovich + + 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 PR tree-optimization/66510 diff --git a/gcc/ipa-chkp.c b/gcc/ipa-chkp.c index 181be9b9648..96f269cd0a9 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 80727d1620c..95107ae6681 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2015-06-18 Ilya Enkovich + + PR middle-end/66567 + * gcc.target/i386/mpx/pr66567.c: New test. + 2015-06-18 Richard Biener 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 00000000000..5a7e2f29e80 --- /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 bee63cd013b..ed734e649c4 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. */ -- 2.30.2