[Bug tree-optimization/83657] New: detect invalid calls to built-ins declared without prototype
msebor at gcc dot gnu.org
gcc-bugzilla@gcc.gnu.org
Tue Jan 2 20:40:00 GMT 2018
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=83657
Bug ID: 83657
Summary: detect invalid calls to built-ins declared without
prototype
Product: gcc
Version: 8.0
Status: UNCONFIRMED
Severity: enhancement
Priority: P3
Component: tree-optimization
Assignee: unassigned at gcc dot gnu.org
Reporter: msebor at gcc dot gnu.org
Target Milestone: ---
As pointed out in bug 83656, GCC (in C mode) fails to issue
-Wbuiltin-declaration-mismatch for the not-entirely-compatible memcpy
declaration with no prototype in the test case below. This makes it possible
to not just overlook such declarations in source code but also miss invalid
calls to them as in the following test case.
Independent of the fix for bug 83656, this is a request to also detect and
diagnose such invalid calls, similarly to how Clang diagnoses them.
$ cat d.c && gcc -O2 -S -Wall -Wextra -Wpedantic d.c
#if __cplusplus
extern "C" void* memcpy (...);
#else
void* memcpy ();
#endif
void f (char *d)
{
memcpy (3, d, "123"); // invalid, should be diagnosed
}
For reference, Clang issues the following warnings:
d.c:5:11: warning: incompatible integer to pointer conversion passing 'int' to
parameter of type 'void *' [-Wint-conversion]
memcpy (3, d, "123");
^
d.c:5:17: warning: incompatible pointer to integer conversion passing 'char
[4]' to parameter of type 'unsigned long' [-Wint-conversion]
memcpy (3, d, "123");
^~~~~
2 warnings generated.
More information about the Gcc-bugs
mailing list