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);
};
```

Reply via email to