https://gcc.gnu.org/bugzilla/show_bug.cgi?id=64797
--- Comment #9 from Jonathan Wakely <redi at gcc dot gnu.org> --- Author: redi Date: Wed Mar 4 17:19:55 2015 New Revision: 221189 URL: https://gcc.gnu.org/viewcvs?rev=221189&root=gcc&view=rev Log: PR libstdc++/64797 * include/bits/locale_conv.h (wstring_convert::_M_conv): Handle incomplete multibyte sequences correctly. * include/std/codecvt (codecvt_utf8, codecvt_utf16, codecvt_utf8_utf16): Limit _Maxcode to maximum Unicode code point. * src/c++11/codecvt.cc (invalid_mb_sequence, incomplete_mb_character): Define constants. (is_high_surrogate, is_low_surrogate, surrogate_pair_to_code_point): Define convenience functions. (read_utf8_code_point): Return relevant constant to distinguish incomplete characters from invalid sequences. (read_utf16_code_point): Likewise. Check for invalid sequences. (ucs4_in, utf16_in): Use incomplete_mb_character constant. (utf16_out): Check for invalid sequences. (utf16_span): Fix condition. (ucs2_out): Use is_high_surrogate. (ucs2_in): Use incomplete_mb_character constant and fix condition. * testsuite/22_locale/codecvt/char16_t.cc: Fix whitespace. * testsuite/22_locale/conversions/buffer/1.cc: New. * testsuite/22_locale/conversions/string/2.cc: Use char16_t and char32_t instead of wchar_t. * testsuite/22_locale/conversions/string/3.cc: New. Added: trunk/libstdc++-v3/testsuite/22_locale/conversions/buffer/1.cc - copied, changed from r221188, trunk/libstdc++-v3/testsuite/22_locale/conversions/string/2.cc trunk/libstdc++-v3/testsuite/22_locale/conversions/string/3.cc - copied, changed from r221188, trunk/libstdc++-v3/testsuite/22_locale/conversions/string/2.cc Modified: trunk/libstdc++-v3/ChangeLog trunk/libstdc++-v3/include/bits/locale_conv.h trunk/libstdc++-v3/include/std/codecvt trunk/libstdc++-v3/src/c++11/codecvt.cc trunk/libstdc++-v3/testsuite/22_locale/codecvt/char16_t.cc trunk/libstdc++-v3/testsuite/22_locale/conversions/string/2.cc