public inbox for gcc-bugs@sourceware.org
help / color / mirror / Atom feed
* [Bug tree-optimization/47316] New: devirtualize calls to virtual methods that are never further overriden
@ 2011-01-16 15:26 zsojka at seznam dot cz
  2011-01-17  8:02 ` [Bug tree-optimization/47316] " zsojka at seznam dot cz
                   ` (4 more replies)
  0 siblings, 5 replies; 6+ messages in thread
From: zsojka at seznam dot cz @ 2011-01-16 15:26 UTC (permalink / raw)
  To: gcc-bugs

http://gcc.gnu.org/bugzilla/show_bug.cgi?id=47316

           Summary: devirtualize calls to virtual methods that are never
                    further overriden
           Product: gcc
           Version: 4.6.0
            Status: UNCONFIRMED
          Severity: enhancement
          Priority: P3
         Component: tree-optimization
        AssignedTo: unassigned@gcc.gnu.org
        ReportedBy: zsojka@seznam.cz
                CC: jamborm@gcc.gnu.org


Created attachment 22984
  --> http://gcc.gnu.org/bugzilla/attachment.cgi?id=22984
testcase

Similiar to PR46043, but the compiler itself can be able to find out there are
cases a virtual method is never overriden.

Maybe this is the original intention of the devirtualization work, but in the
case it is not, I am opening this PR.

It is quite common to have one base class and several derived classes that are
no further derived, and the hierarchy looks roughly like:

class Base {
  virtual void f1();
  virtual void f2();
  virtual void f3();
};

class A : Base {
  virtual void f1() { ... this->f3(); ... }
  virtual void f2() { ... this->f1(); ... }
};

class B : Base {
  virtual void f2() { ... this->f1(); ... }
};

void foo(A *a)
{
  ... a->f1(); ...
}

In a whole-program mode, if the compiler finds no type/variable is coming from
external calls (where there could be possibly type derived from Base/A/B), all
these cases could be devirtualized.

Attached is a simple testcase that could be devirtualized, but isn't even with:
$ g++ tstdevirt.C -O3 -fwhole-program


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

end of thread, other threads:[~2013-12-17 16:25 UTC | newest]

Thread overview: 6+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2011-01-16 15:26 [Bug tree-optimization/47316] New: devirtualize calls to virtual methods that are never further overriden zsojka at seznam dot cz
2011-01-17  8:02 ` [Bug tree-optimization/47316] " zsojka at seznam dot cz
2011-01-17 12:35 ` redi at gcc dot gnu.org
2011-01-17 12:39 ` jamborm at gcc dot gnu.org
2013-12-17 16:22 ` hubicka at gcc dot gnu.org
2013-12-17 16:25 ` hubicka at gcc dot gnu.org

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