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

            Bug ID: 93115
           Summary: gcc fails to emit inline function on llvm-roc project:
                    -O1 -fPIC -fdevirtualize -fdevirtualize-speculatively
                    -fipa-cp -fipa-cp-clone -fvisibility-inlines-hidden
           Product: gcc
           Version: 9.2.0
            Status: UNCONFIRMED
          Severity: normal
          Priority: P3
         Component: ipa
          Assignee: unassigned at gcc dot gnu.org
          Reporter: slyfox at inbox dot ru
                CC: marxin at gcc dot gnu.org
  Target Milestone: ---

Created attachment 47577
  --> https://gcc.gnu.org/bugzilla/attachment.cgi?id=47577&action=edit
bug.cpp

Original build failure found and diagnosed by Jan Ziak in
https://bugs.gentoo.org/704252. There gcc-9.2.0 fails to link an LLVM library
due to missing inline function definition.

It looks like two main triggers are -fdevirtualize-speculatively and
-fipa-cp-clone trick gcc into not emitting inline function body. And only
presence of -fvisibility-inlines-hidden makes it noticeable.

I've managed to reproduce it on gcc-master and on gcc-9.2.0:

This works:
$ g++-9.2.0 -fPIC -O1 -fdevirtualize -fdevirtualize-speculatively -fipa-cp
-fipa-cp-clone -fPIC -shared -o libbug.so bug.cpp -DLIB_FILE
$ g++-9.2.0 -fPIC -O1 -fdevirtualize -fdevirtualize-speculatively -fipa-cp
-fipa-cp-clone               -o main      bug.cpp -DMAIN_FILE -L. -lbug

This fails:
g++-9.2.0 -fPIC -O1 -fdevirtualize -fdevirtualize-speculatively -fipa-cp
-fipa-cp-clone -fvisibility-inlines-hidden -fPIC -shared -o libbug.so bug.cpp
-DLIB_FILE
g++-9.2.0 -fPIC -O1 -fdevirtualize -fdevirtualize-speculatively -fipa-cp
-fipa-cp-clone -fvisibility-inlines-hidden               -o main      bug.cpp
-DMAIN_FILE -L. -lbug
/usr/bin/ld: /tmp/ccQYknNI.o: in function `p()':
bug.cpp:(.text+0x25): undefined reference to `m::av() const'
/usr/bin/ld: bug.cpp:(.text+0x4e): undefined reference to `m::av() const'
collect2: error: ld returned 1 exit status

Note: we build both library libbug.so and main executables to observe that main
lacks definition of inlinable 'm::av()'.

Reply via email to