re PR middle-end/64805 (Specific use of __attribute ((always_inline)) breaks MPX...
authorIlya Enkovich <ilya.enkovich@intel.com>
Thu, 29 Jan 2015 11:03:02 +0000 (11:03 +0000)
committerIlya Enkovich <ienkovich@gcc.gnu.org>
Thu, 29 Jan 2015 11:03:02 +0000 (11:03 +0000)
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

gcc/ChangeLog
gcc/ipa-inline.c
gcc/testsuite/ChangeLog
gcc/testsuite/gcc.target/i386/pr64805.c [new file with mode: 0644]

index 81a4311ef7d91b2a852597f53d1c20383ff41750..7afc30186bfd3cc5d726d4bbae34b201b62fb482 100644 (file)
@@ -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.
index f91a6a53b44010f006698af08bea8730a0c8aa5c..be2289074006da30424f179dcc78690b88d39bca 100644 (file)
@@ -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);
index 729f386011a8cd5e875bcfc9f4d00afd191736f5..df9f025cc029f4fd2956de1f84b2a65125181271 100644 (file)
@@ -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 (file)
index 0000000..8ba0a97
--- /dev/null
@@ -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;
+}