https://gcc.gnu.org/bugzilla/show_bug.cgi?id=115912
--- Comment #2 from Sam James <sjames at gcc dot gnu.org> --- Surrounding this template from src/hb-open-type.hh w/ optimize("O0") cures it: ``` template <typename Type, unsigned fraction_bits> struct HBFixed : Type { static constexpr float shift = (float) (1 << fraction_bits); static_assert (Type::static_size * 8 > fraction_bits, ""); operator signed () const = delete; operator unsigned () const = delete; explicit operator float () const { return to_float (); } typename Type::type to_int () const { return Type::v; } void set_int (typename Type::type i ) { Type::v = i; } float to_float (float offset = 0) const { return ((int32_t) Type::v + offset) / shift; } void set_float (float f) { Type::v = roundf (f * shift); } public: DEFINE_SIZE_STATIC (Type::static_size); }; ```