re PR ipa/81261 (ICE with -fno-guess-branch-probability)
authorJan Hubicka <hubicka@ucw.cz>
Fri, 30 Jun 2017 21:09:13 +0000 (23:09 +0200)
committerJan Hubicka <hubicka@gcc.gnu.org>
Fri, 30 Jun 2017 21:09:13 +0000 (21:09 +0000)
PR ipa/81261
* tree-inline.c (expand_call_inline): Combine profile statuses.

From-SVN: r249856

gcc/ChangeLog
gcc/testsuite/ChangeLog
gcc/testsuite/g++.dg/ipa/pr81261.C [new file with mode: 0644]
gcc/tree-inline.c

index 73a0555d432717055a5d192be4b18f4ef5ae975d..4da9e3f147fdddd3957ef617b7d91791cd59fdc0 100644 (file)
@@ -1,3 +1,8 @@
+2017-06-29  Jan Hubicka  <hubicka@ucw.cz>
+
+       PR ipa/81261
+       * tree-inline.c (expand_call_inline): Combine profile statuses.
+
 2017-06-30  Andrew Pinski  <apinski@cavium.com>
 
        * tree-if-conv.c (predicate_scalar_phi): Update new_stmt if
index 0331735cae05bd50aa9b32325716ef85f5007c61..73ef3a0262dc564e7423f4f420a0f0698a65c574 100644 (file)
@@ -1,3 +1,8 @@
+2017-06-29  Jan Hubicka  <hubicka@ucw.cz>
+
+       PR ipa/81261
+       * g++.dg/ipa/pr81261.C: New testcase.
+
 2017-06-30  Andrew Pinski  <apinski@cavium.com>
 
        * gcc.dg/torture/pr81245.c: New testcase.
diff --git a/gcc/testsuite/g++.dg/ipa/pr81261.C b/gcc/testsuite/g++.dg/ipa/pr81261.C
new file mode 100644 (file)
index 0000000..f182eb1
--- /dev/null
@@ -0,0 +1,31 @@
+/* { dg-do compile } */
+/* { dg-options "-O1 -fno-guess-branch-probability"  } */
+
+struct CBase {
+  virtual void BaseFunc () {}
+};
+
+struct MMixin {
+  virtual void * MixinFunc (int, void *) = 0;
+};
+
+struct CExample: CBase, public MMixin
+{
+  void *MixinFunc (int arg, void *arg2)
+  {
+    if (arg != 1 || arg2)
+      return 0;
+    return this;
+  }
+};
+
+void *test (MMixin & anExample)
+{
+  return anExample.MixinFunc (1, 0);
+}
+
+int main ()
+{
+  CExample c;
+  return (test (c) != &c);
+}
index 9306c3fbdf797d8c32422ba2ab34792ca2876164..d4e4ef172479afe981f80543444ddd834510f523 100644 (file)
@@ -4650,6 +4650,9 @@ expand_call_inline (basic_block bb, gimple *stmt, copy_body_data *id)
   else
     id->dst_simt_vars = NULL;
 
+  if (profile_status_for_fn (id->src_cfun) == PROFILE_ABSENT)
+    profile_status_for_fn (dst_cfun) = PROFILE_ABSENT;
+
   /* If the src function contains an IFN_VA_ARG, then so will the dst
      function after inlining.  Likewise for IFN_GOMP_USE_SIMT.  */
   prop_mask = PROP_gimple_lva | PROP_gimple_lomp_dev;