commit | 567cedcc5f99aae2db9c7f124b7f3a6f4b5ec57d | [log] [tgz] |
---|---|---|
author | Behdad Esfahbod <behdad@behdad.org> | Mon Feb 22 22:09:15 2021 -0700 |
committer | Behdad Esfahbod <behdad@behdad.org> | Mon Feb 22 22:32:42 2021 -0700 |
tree | eb87aff694f64e4047f74c11fa6864edb775dcae | |
parent | f4f35a4d5fd595bc6887b9951f1c92ce4d100fe8 [diff] |
Narrow down cast operators on IntType Say for USHORT, we were implementing casts from and to unsigned. With this change, we cast from and to uint16_t only. This allows compiler more opportunities to catch possible narrowing issues in the code. It needed a couple of fixes in the codebase though, because previously, if a USHORT was participating in arithmetic with signed numbers, eg. "u + 1", the result would have been unsigned. With this change, it would be signed. The correct fix is to update the code to read "u + 1u". That said, I think about conditionally adding back the cast out to signed/unsigned, to facilitate better type deduction. But I couldn't think of a real situation where that would help with anything. So I didn't add. Here's what it was: template <typename Type2 = hb_conditional<hb_is_signed (Type), signed, unsigned>, hb_enable_if (sizeof (Type) < sizeof (Type2))> operator hb_type_identity_t<Type2> () const { return v; } https://github.com/harfbuzz/harfbuzz/pull/2875
This is HarfBuzz, a text shaping library.
For bug reports, mailing list, and other information please visit:
For license information, see COPYING.
For build information, see BUILD.md.
For custom configurations, see CONFIG.md.
For test execution, see TESTING.md.
Documentation: https://harfbuzz.github.io