diff options
author | Jonathan Wakely <jwakely@redhat.com> | 2017-03-17 19:28:05 +0000 |
---|---|---|
committer | Jonathan Wakely <redi@gcc.gnu.org> | 2017-03-17 19:28:05 +0000 |
commit | d951e75dfe83b86dd2c46c7835e03bbf04b29278 (patch) | |
tree | 0e22d701b0437cb98ff145680df2d6dab207e8bb /gcc/c/c-parser.c | |
parent | d1a73b0baead836a8d813a6a63459ef87a270bba (diff) | |
download | gcc-d951e75dfe83b86dd2c46c7835e03bbf04b29278.zip gcc-d951e75dfe83b86dd2c46c7835e03bbf04b29278.tar.gz gcc-d951e75dfe83b86dd2c46c7835e03bbf04b29278.tar.bz2 |
Fix alignment bugs in std::codecvt_utf16
* src/c++11/codecvt.cc (range): Add non-type template parameter and
define oerloaded operators for reading and writing code units.
(range<Elem, false>): Define partial specialization for accessing
wide characters in potentially unaligned byte ranges.
(ucs2_span(const char16_t*, const char16_t*, ...))
(ucs4_span(const char16_t*, const char16_t*, ...)): Change parameters
to range<const char16_t, false> in order to avoid unaligned reads.
(__codecvt_utf16_base<char16_t>::do_out)
(__codecvt_utf16_base<char32_t>::do_out)
(__codecvt_utf16_base<wchar_t>::do_out): Use range specialization for
unaligned data to avoid unaligned writes.
(__codecvt_utf16_base<char16_t>::do_in)
(__codecvt_utf16_base<char32_t>::do_in)
(__codecvt_utf16_base<wchar_t>::do_in): Likewise for writes. Return
error if there are unprocessable trailing bytes.
(__codecvt_utf16_base<char16_t>::do_length)
(__codecvt_utf16_base<char32_t>::do_length)
(__codecvt_utf16_base<wchar_t>::do_length): Pass arguments of type
range<const char16_t, false> to span functions.
* testsuite/22_locale/codecvt/codecvt_utf16/misaligned.cc: New test.
From-SVN: r246245
Diffstat (limited to 'gcc/c/c-parser.c')
0 files changed, 0 insertions, 0 deletions