Hi Martin, > In all cases all the information necessary to detect and diagnose > or even avoid the problem is available. In fact, one might argue > that optimizing such calls (expanding them inline) would be > preferable to doing nothing and allowing the undefined behavior > to cause a bug at runtime.
I think the right thing to do here would emit a warning for declaring the builtin with the wrong prototype. If you try to do the equivalent in C++ you get this: cat test.cc extern "C" void* memcpy (...); void p (void *d, const void *s) { memcpy (d, s, 0); } g++ -S test.cc test.cc:1:18: warning: declaration of ‘void* memcpy(...)’ conflicts with built-in declaration ‘void* memcpy(void*, const void*, long unsigned int)’ [-Wbuiltin-declaration-mismatch] extern "C" void* memcpy (...); ^~~~~~ You get the same warning in C when the Prototype does not match, but unfortunately not when the prototype is missing. I would prefer the same warning in C whenever the declaration does not match. Bernd.