It looks like whenever you guys changed "SDCC_mcs51" to "__SDCC_mcs51", stdio.h didn't get updated. I'm specifically referencing line 84 in SDCC/include/stdio.h for SDCC version 3.3.0.
This issue causes the compiler to throw a warning due to an implicit declaration when using printf_fast(), printf_fast_f(), or printf_tiny(), since these prototypes don't get defined in stdio.h due to using the incorrect #define. This subsequently causes a compiler error for using too many parameters for the printf_*() function.
This is (obviously) seen when compiling for the mcs51. The failure can be achieved either by not specifying a processor target or by using -mmcs51 at the command line. I would imagine a simple "hello world" using printf_tiny() would show the problem for testing purposes.
Thanks for pointing this out, though a bug report would have been better. I guess it went unnoticed due to the fact that these functions are incompatible with the regression test suite and thereby not even linked in without execution.
It may also have been on purpose as it declares functions that are not defined in the standard. When you use --std-sdccXX the sdcc extensions are enabled and this macro is defined.