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