diff options
author | Jonathan Wakely <jwakely@redhat.com> | 2016-04-20 18:40:02 +0100 |
---|---|---|
committer | Jonathan Wakely <redi@gcc.gnu.org> | 2016-04-20 18:40:02 +0100 |
commit | a1e1ec76058dfe6d995555ce8f6633882e99e84d (patch) | |
tree | 083d5afccff7d9acb19632340efe3fd655c5c102 | |
parent | 1011119f4752c6f1a97156d3a24ea7dff7c0cb02 (diff) | |
download | gcc-a1e1ec76058dfe6d995555ce8f6633882e99e84d.zip gcc-a1e1ec76058dfe6d995555ce8f6633882e99e84d.tar.gz gcc-a1e1ec76058dfe6d995555ce8f6633882e99e84d.tar.bz2 |
Fix std::codecvt_utf8* for big-endian targets
PR libstdc++/69703
* src/c++11/codecvt.cc (__codecvt_utf8_base<char16_t>::do_in,
__codecvt_utf8_utf16_base<char16_t>::do_in): Fix mask operations.
From-SVN: r235293
-rw-r--r-- | libstdc++-v3/ChangeLog | 8 | ||||
-rw-r--r-- | libstdc++-v3/src/c++11/codecvt.cc | 4 |
2 files changed, 9 insertions, 3 deletions
diff --git a/libstdc++-v3/ChangeLog b/libstdc++-v3/ChangeLog index 6eed9a3..e6934a5 100644 --- a/libstdc++-v3/ChangeLog +++ b/libstdc++-v3/ChangeLog @@ -1,7 +1,13 @@ +2016-04-20 Jonathan Wakely <jwakely@redhat.com> + + PR libstdc++/69703 + * src/c++11/codecvt.cc (__codecvt_utf8_base<char16_t>::do_in, + __codecvt_utf8_utf16_base<char16_t>::do_in): Fix mask operations. + 2016-04-19 Jonathan Wakely <jwakely@redhat.com> PR libstdc++/69703 - * src/c++11/codecvt.cc (__codecvt_utf8_base<char16_t>::do_in)): + * src/c++11/codecvt.cc (__codecvt_utf8_base<char16_t>::do_in): Override endianness bit in mode. * testsuite/22_locale/codecvt/codecvt_utf8/69703.cc: New test. * testsuite/22_locale/codecvt/codecvt_utf8_utf16/66855.cc: Test diff --git a/libstdc++-v3/src/c++11/codecvt.cc b/libstdc++-v3/src/c++11/codecvt.cc index b6b6358..b60691c 100644 --- a/libstdc++-v3/src/c++11/codecvt.cc +++ b/libstdc++-v3/src/c++11/codecvt.cc @@ -789,7 +789,7 @@ do_in(state_type&, const extern_type* __from, const extern_type* __from_end, { range<const char> from{ __from, __from_end }; range<char16_t> to{ __to, __to_end }; - codecvt_mode mode = codecvt_mode(_M_mode | (consume_header|generate_header)); + codecvt_mode mode = codecvt_mode(_M_mode & (consume_header|generate_header)); #if __BYTE_ORDER__ != __ORDER_BIG_ENDIAN__ mode = codecvt_mode(mode | little_endian); #endif @@ -1268,7 +1268,7 @@ do_in(state_type&, const extern_type* __from, const extern_type* __from_end, { range<const char> from{ __from, __from_end }; range<char16_t> to{ __to, __to_end }; - codecvt_mode mode = codecvt_mode(_M_mode | (consume_header|generate_header)); + codecvt_mode mode = codecvt_mode(_M_mode & (consume_header|generate_header)); #if __BYTE_ORDER__ != __ORDER_BIG_ENDIAN__ mode = codecvt_mode(mode | little_endian); #endif |