diff options
author | Ilya Enkovich <ilya.enkovich@intel.com> | 2015-01-29 11:03:02 +0000 |
---|---|---|
committer | Ilya Enkovich <ienkovich@gcc.gnu.org> | 2015-01-29 11:03:02 +0000 |
commit | c291690eb5bfc51a502854b0ab3b9486718a1661 (patch) | |
tree | 8d085c99ce016f7a300aee80759e8b6e0c48e514 | |
parent | 2b6969cd7f409441be66aafda0d2cc7f27ed310c (diff) | |
download | gcc-c291690eb5bfc51a502854b0ab3b9486718a1661.zip gcc-c291690eb5bfc51a502854b0ab3b9486718a1661.tar.gz gcc-c291690eb5bfc51a502854b0ab3b9486718a1661.tar.bz2 |
re PR middle-end/64805 (Specific use of __attribute ((always_inline)) breaks MPX functionality with -fcheck-pointer-bounds -mmpx)
gcc/
PR middle-end/64805
* ipa-inline.c (early_inliner): Rebuild IPA_REF_CHKP reference
to avoid error in cgraph node verification.
gcc/testsuite/
PR middle-end/64805
* gcc.target/i386/pr64805.c: New.
From-SVN: r220240
-rw-r--r-- | gcc/ChangeLog | 6 | ||||
-rw-r--r-- | gcc/ipa-inline.c | 7 | ||||
-rw-r--r-- | gcc/testsuite/ChangeLog | 5 | ||||
-rw-r--r-- | gcc/testsuite/gcc.target/i386/pr64805.c | 22 |
4 files changed, 40 insertions, 0 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 81a4311..7afc301 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,9 @@ +2015-01-29 Ilya Enkovich <ilya.enkovich@intel.com> + + PR middle-end/64805 + * ipa-inline.c (early_inliner): Rebuild IPA_REF_CHKP reference + to avoid error in cgraph node verification. + 2015-01-29 Marek Polacek <polacek@redhat.com> * doc/standards.texi: Reflect that the default for C is gnu11. diff --git a/gcc/ipa-inline.c b/gcc/ipa-inline.c index f91a6a5..be22890 100644 --- a/gcc/ipa-inline.c +++ b/gcc/ipa-inline.c @@ -2506,6 +2506,13 @@ early_inliner (function *fun) #endif node->remove_all_references (); + /* Rebuild this reference because it dosn't depend on + function's body and it's required to pass cgraph_node + verification. */ + if (node->instrumented_version + && !node->instrumentation_clone) + node->create_reference (node->instrumented_version, IPA_REF_CHKP, NULL); + /* Even when not optimizing or not inlining inline always-inline functions. */ inlined = inline_always_inline_functions (node); diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 729f386..df9f025 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2015-01-29 Ilya Enkovich <ilya.enkovich@intel.com> + + PR middle-end/64805 + * gcc.target/i386/pr64805.c: New. + 2015-01-29 Rainer Orth <ro@CeBiTec.Uni-Bielefeld.DE> * gcc.dg/guality/guality.h (main): Add argv[0] to diff --git a/gcc/testsuite/gcc.target/i386/pr64805.c b/gcc/testsuite/gcc.target/i386/pr64805.c new file mode 100644 index 0000000..8ba0a97 --- /dev/null +++ b/gcc/testsuite/gcc.target/i386/pr64805.c @@ -0,0 +1,22 @@ +/* { dg-do compile } */ +/* { dg-require-effective-target mpx } */ +/* { dg-options "-fcheck-pointer-bounds -mmpx" } */ + +#include <stdio.h> + +static inline void __attribute ((always_inline)) functionA(void) +{ + return; +} + +static inline void __attribute ((always_inline)) functionB(void) +{ + functionA(); +} + +int test(void) +{ + functionB(); + + return 0; +} |