extern "C" { extern int printf (__const char *__restrict __format, ...); } class cException { }; class TCmdenvApp { public: virtual int run(); }; int TCmdenvApp::run() { try { printf("\nPreparing for Run #%d...\n", 1); } catch (cException *e) { } } int main() { TCmdenvApp app; app.run(); }
> ./g++ -B. -B ../x86_64-unknown-linux-gnu/libstdc++-v3/src/.libs cmdenv.3.ii > -flto -fwhole-program -fPIC /tmp/ccc2e3Uh.lto.o:(.gcc_except_table+0x10): undefined reference to `.LDFCM0' collect2: ld returned 1 exit status works without either of -flto, -fwhole-program or -fPIC. It looks like .LDFCM0 is privatized on read-in to .LDFCM0.1932 in lto_set_decl_assembler_name but dwarf2out does not compensate for that? -- Summary: Undefined reference with -fPIC -fwhole-program -flto Product: gcc Version: 4.5.0 Status: UNCONFIRMED Keywords: lto Severity: normal Priority: P3 Component: middle-end AssignedTo: unassigned at gcc dot gnu dot org ReportedBy: rguenth at gcc dot gnu dot org http://gcc.gnu.org/bugzilla/show_bug.cgi?id=41729