public inbox for gcc-bugs@sourceware.org
help / color / mirror / Atom feed
* [Bug ipa/63745] New: [4.9/5 Regression] mythtv build failure due to aggressive speculative devirtualization
@ 2014-11-05  8:53 trippels at gcc dot gnu.org
  2014-11-05  8:54 ` [Bug ipa/63745] " trippels at gcc dot gnu.org
                   ` (5 more replies)
  0 siblings, 6 replies; 7+ messages in thread
From: trippels at gcc dot gnu.org @ 2014-11-05  8:53 UTC (permalink / raw)
  To: gcc-bugs

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


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

* [Bug ipa/63745] [4.9/5 Regression] mythtv build failure due to aggressive speculative devirtualization
  2014-11-05  8:53 [Bug ipa/63745] New: [4.9/5 Regression] mythtv build failure due to aggressive speculative devirtualization trippels at gcc dot gnu.org
@ 2014-11-05  8:54 ` trippels at gcc dot gnu.org
  2014-11-05  9:03 ` trippels at gcc dot gnu.org
                   ` (4 subsequent siblings)
  5 siblings, 0 replies; 7+ messages in thread
From: trippels at gcc dot gnu.org @ 2014-11-05  8:54 UTC (permalink / raw)
  To: gcc-bugs

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

--- Comment #1 from Markus Trippelsdorf <trippels at gcc dot gnu.org> ---
Created attachment 33888
  --> https://gcc.gnu.org/bugzilla/attachment.cgi?id=33888&action=edit
unreduced testcase


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

* [Bug ipa/63745] [4.9/5 Regression] mythtv build failure due to aggressive speculative devirtualization
  2014-11-05  8:53 [Bug ipa/63745] New: [4.9/5 Regression] mythtv build failure due to aggressive speculative devirtualization trippels at gcc dot gnu.org
  2014-11-05  8:54 ` [Bug ipa/63745] " trippels at gcc dot gnu.org
@ 2014-11-05  9:03 ` trippels at gcc dot gnu.org
  2014-11-05  9:48 ` trippels at gcc dot gnu.org
                   ` (3 subsequent siblings)
  5 siblings, 0 replies; 7+ messages in thread
From: trippels at gcc dot gnu.org @ 2014-11-05  9:03 UTC (permalink / raw)
  To: gcc-bugs

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

--- Comment #2 from Markus Trippelsdorf <trippels at gcc dot gnu.org> ---
Sorry reduced testcase was cut off. Here it is in its full glory:

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 ();
  }
};

VideoPerformanceTest a;
int
main () { a.Test (); }


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

* [Bug ipa/63745] [4.9/5 Regression] mythtv build failure due to aggressive speculative devirtualization
  2014-11-05  8:53 [Bug ipa/63745] New: [4.9/5 Regression] mythtv build failure due to aggressive speculative devirtualization trippels at gcc dot gnu.org
  2014-11-05  8:54 ` [Bug ipa/63745] " trippels at gcc dot gnu.org
  2014-11-05  9:03 ` trippels at gcc dot gnu.org
@ 2014-11-05  9:48 ` trippels at gcc dot gnu.org
  2014-11-05 12:30 ` rguenth at gcc dot gnu.org
                   ` (2 subsequent siblings)
  5 siblings, 0 replies; 7+ messages in thread
From: trippels at gcc dot gnu.org @ 2014-11-05  9:48 UTC (permalink / raw)
  To: gcc-bugs

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

--- Comment #3 from Markus Trippelsdorf <trippels at gcc dot gnu.org> ---
And here's a hopefully valid testcase:

markus@x4 tmp % cat main.ii

struct VideoBuffers
{
  void StartDisplayingFrame ();
};
struct B
{
  VideoBuffers vbuffers;
  virtual void
  StartDisplay ()
  {
    vbuffers.StartDisplayingFrame ();
  }
};
struct VideoPerformanceTest
{
  B *Test_vo;
  void
  Test ()
  {
    if (!Test_vo)
      return;
    while (1)
      Test_vo->StartDisplay ();
  }
};

VideoPerformanceTest a;
int
main () { a.Test (); }


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

* [Bug ipa/63745] [4.9/5 Regression] mythtv build failure due to aggressive speculative devirtualization
  2014-11-05  8:53 [Bug ipa/63745] New: [4.9/5 Regression] mythtv build failure due to aggressive speculative devirtualization trippels at gcc dot gnu.org
                   ` (2 preceding siblings ...)
  2014-11-05  9:48 ` trippels at gcc dot gnu.org
@ 2014-11-05 12:30 ` rguenth at gcc dot gnu.org
  2014-11-05 13:38 ` hubicka at ucw dot cz
  2014-11-05 14:14 ` trippels at gcc dot gnu.org
  5 siblings, 0 replies; 7+ messages in thread
From: rguenth at gcc dot gnu.org @ 2014-11-05 12:30 UTC (permalink / raw)
  To: gcc-bugs

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

Richard Biener <rguenth at gcc dot gnu.org> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
           Keywords|                            |wrong-code
   Target Milestone|---                         |4.9.3


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

* [Bug ipa/63745] [4.9/5 Regression] mythtv build failure due to aggressive speculative devirtualization
  2014-11-05  8:53 [Bug ipa/63745] New: [4.9/5 Regression] mythtv build failure due to aggressive speculative devirtualization trippels at gcc dot gnu.org
                   ` (3 preceding siblings ...)
  2014-11-05 12:30 ` rguenth at gcc dot gnu.org
@ 2014-11-05 13:38 ` hubicka at ucw dot cz
  2014-11-05 14:14 ` trippels at gcc dot gnu.org
  5 siblings, 0 replies; 7+ messages in thread
From: hubicka at ucw dot cz @ 2014-11-05 13:38 UTC (permalink / raw)
  To: gcc-bugs

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

--- Comment #4 from Jan Hubicka <hubicka at ucw dot cz> ---
> struct VideoBuffers
> {
>   void StartDisplayingFrame ();
> };
> struct B
> {
>   VideoBuffers vbuffers;
>   virtual void
>   StartDisplay ()
>   {
>     vbuffers.StartDisplayingFrame ();
>   }
So we devirtualize to StartDisplay but that leads to linker failure because
StartDisplayingFrame is not linked with the object file.

I think this is similar to some earlier testcases we run across in libreoffice
and we managed to declare it invalid - if you provide inline function body you
need to link the unit with symbols it uses.

Honza


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

* [Bug ipa/63745] [4.9/5 Regression] mythtv build failure due to aggressive speculative devirtualization
  2014-11-05  8:53 [Bug ipa/63745] New: [4.9/5 Regression] mythtv build failure due to aggressive speculative devirtualization trippels at gcc dot gnu.org
                   ` (4 preceding siblings ...)
  2014-11-05 13:38 ` hubicka at ucw dot cz
@ 2014-11-05 14:14 ` trippels at gcc dot gnu.org
  5 siblings, 0 replies; 7+ messages in thread
From: trippels at gcc dot gnu.org @ 2014-11-05 14:14 UTC (permalink / raw)
  To: gcc-bugs

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

Markus Trippelsdorf <trippels at gcc dot gnu.org> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
             Status|UNCONFIRMED                 |RESOLVED
         Resolution|---                         |INVALID

--- Comment #5 from Markus Trippelsdorf <trippels at gcc dot gnu.org> ---
(In reply to Jan Hubicka from comment #4)
> > struct VideoBuffers
> > {
> >   void StartDisplayingFrame ();
> > };
> > struct B
> > {
> >   VideoBuffers vbuffers;
> >   virtual void
> >   StartDisplay ()
> >   {
> >     vbuffers.StartDisplayingFrame ();
> >   }
> So we devirtualize to StartDisplay but that leads to linker failure because
> StartDisplayingFrame is not linked with the object file.
> 
> I think this is similar to some earlier testcases we run across in
> libreoffice
> and we managed to declare it invalid - if you provide inline function body
> you
> need to link the unit with symbols it uses.

OK. That was my fist reaction, too. 
But it is irritating that it succeeds with -flto.


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

end of thread, other threads:[~2014-11-05 14:14 UTC | newest]

Thread overview: 7+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2014-11-05  8:53 [Bug ipa/63745] New: [4.9/5 Regression] mythtv build failure due to aggressive speculative devirtualization trippels at gcc dot gnu.org
2014-11-05  8:54 ` [Bug ipa/63745] " trippels at gcc dot gnu.org
2014-11-05  9:03 ` trippels at gcc dot gnu.org
2014-11-05  9:48 ` trippels at gcc dot gnu.org
2014-11-05 12:30 ` rguenth at gcc dot gnu.org
2014-11-05 13:38 ` hubicka at ucw dot cz
2014-11-05 14:14 ` trippels 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).