https://gcc.gnu.org/bugzilla/show_bug.cgi?id=63745

            Bug ID: 63745
           Summary: [4.9/5 Regression] mythtv build failure due to
                    aggressive speculative devirtualization
           Product: gcc
           Version: 4.9.3
            Status: UNCONFIRMED
          Severity: normal
          Priority: P3
         Component: ipa
          Assignee: unassigned at gcc dot gnu.org
          Reporter: trippels at gcc dot gnu.org
                CC: hubicka at gcc dot gnu.org

With the attached unreduced testcase I get:

markus@x4 /tmp % g++ -flto -O2 foo.ii 2>&1 | grep
"VideoBuffers::StartDisplayingFrame"
markus@x4 /tmp % g++ -fno-devirtualize-speculatively  -O2 foo.ii 2>&1 | grep
"VideoBuffers::StartDisplayingFrame"
markus@x4 /tmp % g++ -O2 foo.ii 2>&1 | grep
"VideoBuffers::StartDisplayingFrame"
/tmp/ccEenHoO.o:main.cpp:function VideoOutput::StartDisplayingFrame(): error:
undefined reference to 'VideoBuffers::StartDisplayingFrame()'
/tmp/ccEenHoO.o:main.cpp:function VideoPerformanceTest::Test(): error:
undefined reference to 'VideoBuffers::StartDisplayingFrame()'

Creduce came up with the following (invalid) testcase:

 % cat main.ii
struct VideoBuffers
{
  void StartDisplayingFrame ();
};
struct B
{
  VideoBuffers vbuffers;
  virtual void
  StartDisplay ()
  {
    vbuffers.StartDisplayingFrame ();
  }
};
struct VideoPerformanceTest
{
  B *Test_vo;
  void
  Test ()
  {
    while (1)
      Test_vo->StartDisplay ();
  }
};

 % g++ -fno-devirtualize-speculatively -O2 -Wl,--no-undefined main.ii
 % g++ -flto -O2 -Wl,--no-undefined main.ii
 % g++ -O2 -Wl,--no-undefined main.ii
/tmp/ccTlyhda.o:main.ii:function B::StartDisplay(): error: undefined reference
to 'VideoBuffers::StartDisplayingFrame()'
/tmp/ccTlyhda.o:main.ii:function main: error: undefined reference to
'VideoBuffers::StartDisplayingFrame()'

Reply via email to