Index: src/locale.cpp =================================================================== --- src/locale.cpp +++ src/locale.cpp @@ -1178,19 +1178,37 @@ #ifdef _LIBCPP_WCTYPE_IS_MASK return static_cast(iswctype_l(c, m, __l)); #else - bool result = false; wint_t ch = static_cast(c); - if (m & space) result |= (iswspace_l(ch, __l) != 0); - if (m & print) result |= (iswprint_l(ch, __l) != 0); - if (m & cntrl) result |= (iswcntrl_l(ch, __l) != 0); - if (m & upper) result |= (iswupper_l(ch, __l) != 0); - if (m & lower) result |= (iswlower_l(ch, __l) != 0); - if (m & alpha) result |= (iswalpha_l(ch, __l) != 0); - if (m & digit) result |= (iswdigit_l(ch, __l) != 0); - if (m & punct) result |= (iswpunct_l(ch, __l) != 0); - if (m & xdigit) result |= (iswxdigit_l(ch, __l) != 0); - if (m & blank) result |= (iswblank_l(ch, __l) != 0); - return result; + switch (m) { + case space: + return iswspace_l(ch, __l); + case print: + return iswprint_l(ch, __l); + case cntrl: + return iswcntrl_l(ch, __l); + case upper: + return iswupper_l(ch, __l); + case lower: + return iswlower_l(ch, __l); + case alpha: + return iswalpha_l(ch, __l); + case digit: + return iswdigit_l(ch, __l); + case alnum: + return iswalnum_l(ch, __l); + case punct: + return iswpunct_l(ch, __l); + case xdigit: + return iswxdigit_l(ch, __l); + case blank: + return iswblank_l(ch, __l); + case graph: + return iswgraph_l(ch, __l); + default: + _LIBCPP_ASSERT(false, + "unhandled ctype mask in ctype_byname::do_is"); + abort(); + } #endif }