https://gcc.gnu.org/bugzilla/show_bug.cgi?id=107467
--- Comment #2 from Andrew Pinski <pinskia at gcc dot gnu.org> --- Here is a single file example which just needs -Os -flto -fno-strict-aliasing: template <class T> struct pair { int first; T second; }; template <typename C> [[gnu::optimize("strict-aliasing")]] bool __attribute__((noinline)) compare_pairs(const pair<C> &lhs, const pair<C> &rhs) { return lhs.first == rhs.first && lhs.second == rhs.second; } template <typename B> struct Combined { pair<B *> __attribute__((noinline)) get_const() { return pair<B *>{123, nullptr}; } [[gnu::optimize("strict-aliasing")]] bool __attribute__((noinline)) clashy() { return compare_pairs(get_const(), get_const()); } }; class SomeClass {}; class OtherClass {}; [[gnu::optimize("strict-aliasing")]] [[gnu::used]] void some_func() { Combined<SomeClass> myvar; __builtin_printf("%i\n", myvar.clashy()); } [[gnu::optimize("strict-aliasing")]] void other_func() { Combined<OtherClass> myvar; __builtin_printf("%i\n", myvar.clashy()); } [[gnu::optimize("O0")]] int main() { other_func(); }