https://gcc.gnu.org/bugzilla/show_bug.cgi?id=66499
--- Comment #6 from Jerry DeLisle <jvdelisle at gcc dot gnu.org> --- This is an interesting puzzle. I took the -fdump-tree-original output of compiling the test case and edited out all except the initialization of the two variables char1 and char2. I lined these up so we could see what each 4-byte character looks like. The last two characters should be two characters of c383. We are generating c300 8300 for each character. ------------------- __builtin_memmove ((void *) &char1, (void *) &" T\x00\x00\x00 e\x00\x00\x00 s\x00\x00\x00 t\x00\x00\x00 \x00\x00\x00 w\x00\x00\x00 i\x00\x00\x00 t\x00\x00\x00 h\x00\x00\x00 o\x00\x00\x00 u\x00\x00\x00 t\x00\x00\x00 \x00\x00\x00 l\x00\x00\x00 o\x00\x00\x00 c\x00\x00\x00 a\x00\x00\x00 l\x00\x00\x00 \x00\x00\x00 c\x00\x00\x00 h\x00\x00\x00 a\x00\x00\x00 r\x00\x00"[1]{lb: 1 sz: 4}, 92); __builtin_memmove ((void *) &char2, (void *) &" T\x00\x00\x00 e\x00\x00\x00 s\x00\x00\x00 t\x00\x00\x00 \x00\x00\x00 w\x00\x00\x00 i\x00\x00\x00 t\x00\x00\x00 h\x00\x00\x00 \x00\x00\x00 l\x00\x00\x00 o\x00\x00\x00 c\x00\x00\x00 a\x00\x00\x00 l\x00\x00\x00 \x00\x00\x00 c\x00\x00\x00 h\x00\x00\x00 a\x00\x00\x00 r\x00\x00\x00 \x00\x00\x00 \xc3\x00\x00\x00 \x83\x00\x00\x00 \xc3\x00\x00\x00 \x83\x00\x00"[1]{lb: 1 sz: 4}, 100);