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()'