src/hb-ot-shape-complex-indic.cc | 2 +- src/hb-ot-shape-complex-thai.cc | 2 +- src/hb-ot-shape-fallback.cc | 4 +++- src/hb-private.hh | 32 +++++++++++++++++++++++++++++++- 4 files changed, 36 insertions(+), 4 deletions(-)
New commits: commit 50e5750bd8670b4cf4463471a2348d4c99c9d054 Author: Behdad Esfahbod <beh...@behdad.org> Date: Wed Oct 21 11:10:10 2015 -0200 Avoid unnecessary cast to 64-bit Fixes https://github.com/behdad/harfbuzz/issues/146 Or I think it should. diff --git a/src/hb-private.hh b/src/hb-private.hh index 9db19eb..5ff1444 100644 --- a/src/hb-private.hh +++ b/src/hb-private.hh @@ -242,7 +242,7 @@ static inline unsigned int ARRAY_LENGTH (const Type (&)[n]) { return n; } /* Note: C++ allows sizeof() of variable-lengh arrays. So, if _cond is not * constant, it still compiles (ouch!), but at least we'll get a -Wvla warning. */ -#define ASSERT_STATIC_EXPR_ZERO(_cond) (0 * sizeof (char[(_cond) ? 1 : -1])) +#define ASSERT_STATIC_EXPR_ZERO(_cond) (0 * (unsigned int) sizeof (char[(_cond) ? 1 : -1])) #define _PASTE1(a,b) a##b #define PASTE(a,b) _PASTE1(a,b) commit 305d2fbf5a2db51447c8ed894a48a88896930673 Author: Behdad Esfahbod <beh...@behdad.org> Date: Wed Oct 21 11:04:28 2015 -0200 Add HB_FALLTHROUGH Borrowed from https://bugzilla.mozilla.org/show_bug.cgi?id=1215411 diff --git a/src/hb-ot-shape-complex-indic.cc b/src/hb-ot-shape-complex-indic.cc index 00526f3..0a0257d 100644 --- a/src/hb-ot-shape-complex-indic.cc +++ b/src/hb-ot-shape-complex-indic.cc @@ -756,7 +756,7 @@ initial_reordering_consonant_syllable (const hb_ot_shape_plan_t *plan, { default: assert (false); - /* fallthrough */ + HB_FALLTHROUGH; case BASE_POS_LAST: { diff --git a/src/hb-ot-shape-complex-thai.cc b/src/hb-ot-shape-complex-thai.cc index d4ede20..8a8f2f7 100644 --- a/src/hb-ot-shape-complex-thai.cc +++ b/src/hb-ot-shape-complex-thai.cc @@ -139,7 +139,7 @@ thai_pua_shape (hb_codepoint_t u, thai_action_t action, hb_font_t *font) }; switch (action) { - default: assert (false); /* Fallthrough */ + default: assert (false); HB_FALLTHROUGH; case NOP: return u; case SD: pua_mappings = SD_mappings; break; case SDL: pua_mappings = SDL_mappings; break; diff --git a/src/hb-ot-shape-fallback.cc b/src/hb-ot-shape-fallback.cc index 748372d..3cb3456 100644 --- a/src/hb-ot-shape-fallback.cc +++ b/src/hb-ot-shape-fallback.cc @@ -224,7 +224,7 @@ position_mark (const hb_ot_shape_plan_t *plan, pos.x_offset += base_extents.x_bearing + base_extents.width - mark_extents.width / 2 - mark_extents.x_bearing; break; } - /* Fall through */ + HB_FALLTHROUGH; default: case HB_UNICODE_COMBINING_CLASS_ATTACHED_BELOW: @@ -259,6 +259,7 @@ position_mark (const hb_ot_shape_plan_t *plan, case HB_UNICODE_COMBINING_CLASS_BELOW_RIGHT: /* Add gap, fall-through. */ base_extents.height -= y_gap; + HB_FALLTHROUGH; case HB_UNICODE_COMBINING_CLASS_ATTACHED_BELOW_LEFT: case HB_UNICODE_COMBINING_CLASS_ATTACHED_BELOW: @@ -279,6 +280,7 @@ position_mark (const hb_ot_shape_plan_t *plan, /* Add gap, fall-through. */ base_extents.y_bearing += y_gap; base_extents.height -= y_gap; + HB_FALLTHROUGH; case HB_UNICODE_COMBINING_CLASS_ATTACHED_ABOVE: case HB_UNICODE_COMBINING_CLASS_ATTACHED_ABOVE_RIGHT: diff --git a/src/hb-private.hh b/src/hb-private.hh index be29391..9db19eb 100644 --- a/src/hb-private.hh +++ b/src/hb-private.hh @@ -119,6 +119,36 @@ extern "C" void hb_free_impl(void *ptr); #define HB_FUNC __func__ #endif +/* + * Borrowed from https://bugzilla.mozilla.org/show_bug.cgi?id=1215411 + * HB_FALLTHROUGH is an annotation to suppress compiler warnings about switch + * cases that fall through without a break or return statement. HB_FALLTHROUGH + * is only needed on cases that have code: + * + * switch (foo) { + * case 1: // These cases have no code. No fallthrough annotations are needed. + * case 2: + * case 3: + * foo = 4; // This case has code, so a fallthrough annotation is needed: + * HB_FALLTHROUGH; + * default: + * return foo; + * } + */ +#if defined(__clang__) && __cplusplus >= 201103L + /* clang's fallthrough annotations are only available starting in C++11. */ +# define HB_FALLTHROUGH [[clang::fallthrough]] +#elif defined(_MSC_VER) + /* + * MSVC's __fallthrough annotations are checked by /analyze (Code Analysis): + * https://msdn.microsoft.com/en-us/library/ms235402%28VS.80%29.aspx + */ +# include <sal.h> +# define HB_FALLTHROUGH __fallthrough +#else +# define HB_FALLTHROUGH /* FALLTHROUGH */ +#endif + #if defined(_WIN32) || defined(__CYGWIN__) /* We need Windows Vista for both Uniscribe backend and for * MemoryBarrier. We don't support compiling on Windows XP, _______________________________________________ HarfBuzz mailing list HarfBuzz@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/harfbuzz