aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorIlya Enkovich <ilya.enkovich@intel.com>2015-01-29 11:03:02 +0000
committerIlya Enkovich <ienkovich@gcc.gnu.org>2015-01-29 11:03:02 +0000
commitc291690eb5bfc51a502854b0ab3b9486718a1661 (patch)
tree8d085c99ce016f7a300aee80759e8b6e0c48e514
parent2b6969cd7f409441be66aafda0d2cc7f27ed310c (diff)
downloadgcc-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/ChangeLog6
-rw-r--r--gcc/ipa-inline.c7
-rw-r--r--gcc/testsuite/ChangeLog5
-rw-r--r--gcc/testsuite/gcc.target/i386/pr64805.c22
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;
+}