https://gcc.gnu.org/bugzilla/show_bug.cgi?id=108147
--- Comment #6 from Jakub Jelinek <jakub at gcc dot gnu.org> --- Actually, I see: grep WarningAtf /tmp/*.ii /tmp/M2Emit.ii:extern void m2linemap_WarningAtf (m2linemap_location_t location, void * message); /tmp/M2Emit.ii: m2linemap_WarningAtf (M2LexBuf_TokenToLocation (token), DynamicStrings_string (message)); /tmp/m2linemap.ii:extern "C" void m2linemap_WarningAtf (location_t location, const char *message, ...); /tmp/m2linemap.ii:extern "C" void WarningAtf (location_t location, const char *message, ...); /tmp/m2linemap.ii:m2linemap_WarningAtf (location_t location, const char *message, ...) so there is indeed a mismatch between the caller which is told m2linemap_WarningAtf is not varargs function, and callee which compiles varargs function. The preprocessed source says the wrong prototype comes from m2/gm2-gcc/Gm2linemap.h and I see the mismatch even in my x86_64-linux bootstrap, just the calling convention doesn't care, while powerpc64le-linux one clearly does care. The first two lines of Gm2linemap.h are /* do not edit automatically generated by mc from m2linemap. */ /* m2linemap.def provides access to GCC location_t. m2linemap.def contains: PROCEDURE ErrorAt (location: location_t; message: ADDRESS) ; (* PROCEDURE ErrorAtf (location: location_t; message: ADDRESS; ...) ; PROCEDURE WarningAtf (location: location_t; message: ADDRESS; ...) ; PROCEDURE NoteAtf (location: location_t; message: ADDRESS; ...) ; *) PROCEDURE ErrorAtf (location: location_t; message: ADDRESS) ; PROCEDURE WarningAtf (location: location_t; message: ADDRESS) ; PROCEDURE NoteAtf (location: location_t; message: ADDRESS) ; so I guess it is known there is a mismatch and perhaps it isn't representable in Modula-2, but still this will never work on powerpc64le. So, could there be some wrappers around the ... functions that just pass no arguments to them and are callable from Modula-2?