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.


Reply via email to