On Thu, Jan 18, 2018 at 04:59:01PM +0100, Jan Hubicka wrote:
> this patch ICE where the profile in cgraph mismatch profile in BB. This is 
> becuase
> of expansion of speculative devirtualization where we get some roundoff 
> issues.
> 
> Bootstrapped/regtested x86_64-linux, comitted.
> Honza
> 
>       PR ipa/83619
>       * g++.dg/torture/pr83619.C: New testcase.
>       * cgraph.c (cgraph_edge::redirect_call_stmt_to_callee): Update edge
>       frequencies.
> --- testsuite/g++.dg/torture/pr83619.C        (revision 0)
> +++ testsuite/g++.dg/torture/pr83619.C        (working copy)
...

This testcase FAILs everywhere:
/.../gcc/gcc/testsuite/g++.dg/torture/pr83619.C: In static member function 
'static void i::j< <template-parameter-1-1> >::c(e*)':
/.../gcc/gcc/testsuite/g++.dg/torture/pr83619.C:25:8: warning: invalid use of 
incomplete type 'class e'
/.../gcc/gcc/testsuite/g++.dg/torture/pr83619.C:8:7: note: forward declaration 
of 'class e'
FAIL: g++.dg/torture/pr83619.C   -O0  (test for excess errors)
Excess errors:
/.../gcc/gcc/testsuite/g++.dg/torture/pr83619.C:25:8: warning: invalid use of 
incomplete type 'class e'

The following patch tweaks it so that it doesn't emit the warning, yet still
ICEs before your cgraph.c change and PASSes after it.
Tested on x86_64-linux and i686-linux, ok for trunk?

2018-01-18  Jakub Jelinek  <ja...@redhat.com>

        PR ipa/83619
        * g++.dg/torture/pr83619.C (e): Define before first use instead of
        forward declaration.

--- gcc/testsuite/g++.dg/torture/pr83619.C.jj   2018-01-18 21:11:54.865206861 
+0100
+++ gcc/testsuite/g++.dg/torture/pr83619.C      2018-01-18 23:51:32.693482293 
+0100
@@ -5,7 +5,9 @@ class d
 public:
   virtual unsigned c ();
 };
-class e;
+class e : public d
+{
+};
 class i
 {
   void h ();
@@ -33,9 +35,6 @@ public:
   l (int);
   k *operator-> ();
 };
-class e : public d
-{
-};
 class m final : e
 {
   unsigned c ();

        Jakub

Reply via email to