https://gcc.gnu.org/bugzilla/show_bug.cgi?id=104875
--- Comment #2 from CVS Commits <cvs-commit at gcc dot gnu.org> --- The master branch has been updated by Jonathan Wakely <r...@gcc.gnu.org>: https://gcc.gnu.org/g:8f7b7c1495f92c72da154d32317943a2cc276ca8 commit r12-7643-g8f7b7c1495f92c72da154d32317943a2cc276ca8 Author: Jonathan Wakely <jwak...@redhat.com> Date: Fri Mar 11 14:52:38 2022 +0000 libstdc++: Fix reading UTF-8 characters for 16-bit targets [PR104875] The current code in read_utf8_code_point assumes that integer promotion will create a 32-bit int, but that's not true for 16-bit targets like msp430 and avr. This changes the intermediate variables used for each octet from unsigned char to char32_t, so that (c << N) works correctly when N > 8. libstdc++-v3/ChangeLog: PR libstdc++/104875 * src/c++11/codecvt.cc (read_utf8_code_point): Use char32_t to hold octets that will be left-shifted.