https://gcc.gnu.org/bugzilla/show_bug.cgi?id=89604
--- Comment #6 from Richard Earnshaw <rearnsha at gcc dot gnu.org> --- For the record, the choice of unsigned for the default char type dates back to the original Arm architecture, which only had unsigned byte load instructions (and sign-extending values required two further instructions - a left shift followed by an arithmetic right shift). Even with the current architecture the A32 unsigned byte load instructions are more flexible than the signed byte load instructions.