public inbox for gcc-patches@gcc.gnu.org
 help / color / mirror / Atom feed
* Re: [PATCH, PR 45699] Devirtualize to thunks
@ 2010-10-12 20:35 Benjamin Redelings I
  2010-10-13 12:26 ` Martin Jambor
  2014-02-14 20:19 ` pure virtual method called Benjamin Redelings
  0 siblings, 2 replies; 5+ messages in thread
From: Benjamin Redelings I @ 2010-10-12 20:35 UTC (permalink / raw)
  To: gcc-patches; +Cc: Jan Hubicka, Martin Jambor

Jan Hubicka wrote:
> >  Hi,
> >
> >  folding of OBJ_TYPE_REFs just takes the function declaration in BINFOs
> >  and puts into the call statement.  Unfortunately BINFOs do not put the
> >  declaration of the proper thunk there and so we might ending up not
> >  adjusting the this pointer like in the testcase below.  On the other
> >  hand, BINFOs do contain the deltas and so the folding code can look up
> >  the right thunk in the call graph if need be.  This is what the patch
> >  below does.
Thank you!  That's great.  I can now test gcc 4.6 at -O and -O2... O3 
still gives segfaults.

> >
> >  Bootstrapped and tested on x86_64-linux without any issues.  OK for
> >  trunk?
>
> I guess we should also add an folder that transforms calls to thunk to call to
> the function so inlining and other IPA stuff work?
> At the moment i think both ipa-prop and inliner will get direct calls to thunks wrong.
Should I submit a bugzilla bug for this, as is, or do you need a testcase?
(I'm sure I can get one by whittling down my code, but last time it took 
about 4 hours to do this, so if there's a faster way ... :-P)

-BenRI

^ permalink raw reply	[flat|nested] 5+ messages in thread

* Re: [PATCH, PR 45699] Devirtualize to thunks
  2010-10-12 20:35 [PATCH, PR 45699] Devirtualize to thunks Benjamin Redelings I
@ 2010-10-13 12:26 ` Martin Jambor
  2014-02-14 20:19 ` pure virtual method called Benjamin Redelings
  1 sibling, 0 replies; 5+ messages in thread
From: Martin Jambor @ 2010-10-13 12:26 UTC (permalink / raw)
  To: Benjamin Redelings I; +Cc: gcc-patches

Hi,

On Tue, Oct 12, 2010 at 04:22:15PM -0400, Benjamin Redelings I wrote:
> Jan Hubicka wrote:
> >>  Hi,
> >>
> >>  folding of OBJ_TYPE_REFs just takes the function declaration in BINFOs
> >>  and puts into the call statement.  Unfortunately BINFOs do not put the
> >>  declaration of the proper thunk there and so we might ending up not
> >>  adjusting the this pointer like in the testcase below.  On the other
> >>  hand, BINFOs do contain the deltas and so the folding code can look up
> >>  the right thunk in the call graph if need be.  This is what the patch
> >>  below does.
> Thank you!  That's great.  I can now test gcc 4.6 at -O and -O2...
> O3 still gives segfaults.

No worries.  Thanks for testing.

> 
> >>
> >>  Bootstrapped and tested on x86_64-linux without any issues.  OK for
> >>  trunk?
> >
> >I guess we should also add an folder that transforms calls to thunk to call to
> >the function so inlining and other IPA stuff work?
> >At the moment i think both ipa-prop and inliner will get direct calls to thunks wrong.
> Should I submit a bugzilla bug for this, as is, or do you need a testcase?
> (I'm sure I can get one by whittling down my code, but last time it
> took about 4 hours to do this, so if there's a faster way ... :-P)

Do you mean the segfaults you are experiencing?  Yes, please file a
bug for them.  If not, then we will remember to revisit this
ourselves.

Thanks,

Martin

^ permalink raw reply	[flat|nested] 5+ messages in thread

* pure virtual method called
  2010-10-12 20:35 [PATCH, PR 45699] Devirtualize to thunks Benjamin Redelings I
  2010-10-13 12:26 ` Martin Jambor
@ 2014-02-14 20:19 ` Benjamin Redelings
  2014-02-14 20:21   ` Jan Hubicka
  1 sibling, 1 reply; 5+ messages in thread
From: Benjamin Redelings @ 2014-02-14 20:19 UTC (permalink / raw)
  To: Jan Hubicka; +Cc: gcc-patches

Hi Jan,

     I hope to report a bug soon, but in the meantime I wanted to let 
you know that for the last month or so, the 4.9 branch has (I think) a 
bug at O3, where my program gets:

pure virtual method called
terminate called without an active exception
Aborted

4.8 works fine.

     I am guessing this is related to your devirt work.  I haven't been 
able to produce a reduce testcase yet (sorry!), but here is some code 
that illustrates the C++ type for the object whose virtual table is (?) 
messed up.  (Note: this code compiles but does NOT crash.)

     Again, sorry for not having a testcase.  I'll make one soon. 
Hopefully it is helpful to know that bugs still exist.

-BenRI

#include <vector>

class Object
{
   virtual Object* clone() const =0;
};

template <typename T>
class Box: public Object, public T
{
public:
   Box<T>* clone() const {return new Box<T>(*this);}
};

template <typename T>
using Vector = Box<std::vector<T>>;

int main()
{
   Vector<int> v;
   v.clone();
}

-BenRI

P.S. The bug exists in debian gcc snapshots taken on 2014-02-12 and 
2014-01-22, Linux AMD64.

^ permalink raw reply	[flat|nested] 5+ messages in thread

* Re: pure virtual method called
  2014-02-14 20:19 ` pure virtual method called Benjamin Redelings
@ 2014-02-14 20:21   ` Jan Hubicka
  2014-02-14 20:48     ` Benjamin Redelings
  0 siblings, 1 reply; 5+ messages in thread
From: Jan Hubicka @ 2014-02-14 20:21 UTC (permalink / raw)
  To: Benjamin Redelings; +Cc: Jan Hubicka, gcc-patches

Hi,
the testcase would be wonderful - those bugs are hard to catch. I fixed some issues
recently, so you may try recent snapshot if you didn't.
You may try -fno-devirtualize to see if the bug goes away (likely it will) and you
may try to look in -fdump-tree-all -fdump-ipa-all dumps where cxa_pure_virtual call
appears in the program and send me some context.

Honza
> Hi Jan,
> 
>     I hope to report a bug soon, but in the meantime I wanted to let
> you know that for the last month or so, the 4.9 branch has (I think)
> a bug at O3, where my program gets:
> 
> pure virtual method called
> terminate called without an active exception
> Aborted
> 
> 4.8 works fine.
> 
>     I am guessing this is related to your devirt work.  I haven't
> been able to produce a reduce testcase yet (sorry!), but here is
> some code that illustrates the C++ type for the object whose virtual
> table is (?) messed up.  (Note: this code compiles but does NOT
> crash.)
> 
>     Again, sorry for not having a testcase.  I'll make one soon.
> Hopefully it is helpful to know that bugs still exist.
> 
> -BenRI
> 
> #include <vector>
> 
> class Object
> {
>   virtual Object* clone() const =0;
> };
> 
> template <typename T>
> class Box: public Object, public T
> {
> public:
>   Box<T>* clone() const {return new Box<T>(*this);}
> };
> 
> template <typename T>
> using Vector = Box<std::vector<T>>;
> 
> int main()
> {
>   Vector<int> v;
>   v.clone();
> }
> 
> -BenRI
> 
> P.S. The bug exists in debian gcc snapshots taken on 2014-02-12 and
> 2014-01-22, Linux AMD64.

^ permalink raw reply	[flat|nested] 5+ messages in thread

* Re: pure virtual method called
  2014-02-14 20:21   ` Jan Hubicka
@ 2014-02-14 20:48     ` Benjamin Redelings
  0 siblings, 0 replies; 5+ messages in thread
From: Benjamin Redelings @ 2014-02-14 20:48 UTC (permalink / raw)
  To: Jan Hubicka; +Cc: gcc-patches

On 02/14/2014 03:21 PM, Jan Hubicka wrote:
> Hi,
> the testcase would be wonderful - those bugs are hard to catch.
Yeah - hope to soon.
>   I fixed some issues
> recently, so you may try recent snapshot if you didn't.
> You may try -fno-devirtualize to see if the bug goes away (likely it will) and you
> may try to look in -fdump-tree-all -fdump-ipa-all dumps where cxa_pure_virtual call
> appears in the program and send me some context.
Thanks!
-BenRI

^ permalink raw reply	[flat|nested] 5+ messages in thread

end of thread, other threads:[~2014-02-14 20:48 UTC | newest]

Thread overview: 5+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2010-10-12 20:35 [PATCH, PR 45699] Devirtualize to thunks Benjamin Redelings I
2010-10-13 12:26 ` Martin Jambor
2014-02-14 20:19 ` pure virtual method called Benjamin Redelings
2014-02-14 20:21   ` Jan Hubicka
2014-02-14 20:48     ` Benjamin Redelings

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).