I don't think it breaks any standard C/C++ code, but the ABI allows
C/C++ code to be called from assembler (and other languages) and
defines how return values should be promoted. It's quite proper for
assembly code to assume that return values are promoted according to
their type, and this is where the libffi breakage came from.
Also, non-portable C/C++code that assumes that short and char values
will be promoted to ints will be broken by this change. Sure, it's
nonstandard C/C++ code, but according to the ABI it shouldn't break.
We don't know how much code of this kind there is.