> 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.

Oops, sorry. I had corrected version somewhere. The change is OK.

Honz
> 
> --- 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