gcc/
authorienkovich <ienkovich@138bc75d-0d04-0410-961f-82ee72b054a4>
Thu, 29 Jan 2015 11:03:02 +0000 (11:03 +0000)
committerienkovich <ienkovich@138bc75d-0d04-0410-961f-82ee72b054a4>
Thu, 29 Jan 2015 11:03:02 +0000 (11:03 +0000)
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.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@220240 138bc75d-0d04-0410-961f-82ee72b054a4

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

index 81a4311..7afc301 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 f91a6a5..be22890 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 729f386..df9f025 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;
+}