You're on the right track. I built gtkmm with the -flto compile and link option (and gcc 9.3.0). Then Ahmet's test case does not work.
I then removed the redefiniton of G_GNUC_CONST and wrapped the call to Gtk::TextView::get_type() in a call to g_type_ensure() in wrap_init.cc. The test case then works even with LTO enabled.
I guess that with LTO the linker notices that the get_type() methods are declared with __attribute__((__const__)) (from the expansion of G_GNUC_CONST) in one compilation unit and then assumes that it's okay to optimize as if it were declared that way everywhere.
g_type_ensure() is safer than the redefinition of
G_GNUC_CONST. I'll fix this in
glibmm/tools/generate_wrap_init.pl.in. (wrap_init.cc is
generated by generate_wrap_init.pl.) It will probably take quite
some time before this fix is available in released versions of
all affected mm packages. Meanwhile it would be fine if Fedora
and other distros could build the mm packages without LTO.
I believe this is caused by https://fedoraproject.org/wiki/LTOByDefault
I built the srpm and noticed that the get_type() calls were present in wrap_init.o but was missing from the .so
I added
%define _lto_cflags %{nil}
to the gtkmm .spec file and rebuilt--this disables LTO; the get_type() were then present in the .so
I've left a comment at Fedora's bug tracker for them to disable lto in mm packagesI've left a comment at Fedora's bug tracker for them to disable lto in mm packages. But if we used g_type_ensure() then LTO would be possible I think