We get 4 warnings when building kernel with W=1:
drivers/net/ethernet/qlogic/qed/qed_selftest.c:6:5: warning: no previous prototype for 'qed_selftest_memory' [-Wmissing-prototypes]
drivers/net/ethernet/qlogic/qed/qed_selftest.c:19:5: warning: no previous prototype for 'qed_selftest_interrupt' [-Wmissing-prototypes]
drivers/net/ethernet/qlogic/qed/qed_selftest.c:32:5: warning: no previous prototype for 'qed_selftest_register' [-Wmissing-prototypes]
drivers/net/ethernet/qlogic/qed/qed_selftest.c:55:5: warning: no previous prototype for 'qed_selftest_clock' [-Wmissing-prototypes]
In fact, these functions are declared in qed_selftest.h, so this patch
add missing header dependencies.
Signed-off-by: Baoyou Xie <redacted>
---
drivers/net/ethernet/qlogic/qed/qed_selftest.c | 1 +
1 file changed, 1 insertion(+)
We get 4 warnings when building kernel with W=1:
drivers/net/ethernet/qlogic/qed/qed_selftest.c:6:5: warning: no previous
prototype for 'qed_selftest_memory' [-Wmissing-prototypes]
drivers/net/ethernet/qlogic/qed/qed_selftest.c:19:5: warning: no previous
prototype for 'qed_selftest_interrupt' [-Wmissing-prototypes]
drivers/net/ethernet/qlogic/qed/qed_selftest.c:32:5: warning: no previous
prototype for 'qed_selftest_register' [-Wmissing-prototypes]
drivers/net/ethernet/qlogic/qed/qed_selftest.c:55:5: warning: no previous
prototype for 'qed_selftest_clock' [-Wmissing-prototypes]
In fact, these functions are declared in qed_selftest.h, so this patch add missing
header dependencies.
Signed-off-by: Baoyou Xie <redacted>
While I obviously have no strong objection for including qed_selftest.h
from qed_selftest.c, I'm not sure I understand which C standard dictates
this requirement.
Why should a function definition [not call] be preceded by a prototype?
On Wednesday, September 7, 2016 11:37:07 AM CEST Yuval Mintz wrote:
quoted
We get 4 warnings when building kernel with W=1:
drivers/net/ethernet/qlogic/qed/qed_selftest.c:6:5: warning: no previous
prototype for 'qed_selftest_memory' [-Wmissing-prototypes]
drivers/net/ethernet/qlogic/qed/qed_selftest.c:19:5: warning: no previous
prototype for 'qed_selftest_interrupt' [-Wmissing-prototypes]
drivers/net/ethernet/qlogic/qed/qed_selftest.c:32:5: warning: no previous
prototype for 'qed_selftest_register' [-Wmissing-prototypes]
drivers/net/ethernet/qlogic/qed/qed_selftest.c:55:5: warning: no previous
prototype for 'qed_selftest_clock' [-Wmissing-prototypes]
In fact, these functions are declared in qed_selftest.h, so this patch add missing
header dependencies.
Signed-off-by: Baoyou Xie <redacted>
While I obviously have no strong objection for including qed_selftest.h
from qed_selftest.c, I'm not sure I understand which C standard dictates
this requirement.
Why should a function definition [not call] be preceded by a prototype?
This rule addresses two problems:
- some functions should be marked static as they are never used outside
of the file that declares them. Marking them static give the compiler
better opportunities for optimization and lets you see when a function
becomes unused, and if there is no external declaration that is often
an indication that there are no other users.
- When a function is defined in one file and used in another, you want
both files to include the same header that has the declaration to
ensure that the types are identical. There are cases where the
prototype is changed after the fact in an incompatible way, causing
silent data corruption on some configurations but maybe not on others.
Arnd
While I obviously have no strong objection for including
qed_selftest.h from qed_selftest.c, I'm not sure I understand which C
standard dictates this requirement.
Why should a function definition [not call] be preceded by a prototype?
- When a function is defined in one file and used in another, you want both files to include the same header that has the declaration to ensure that the types are identical. There are cases where the prototype is changed after the fact in an incompatible way, causing silent data corruption on some configurations but maybe not on others.
O.k., motivation is clear.
But this really isn't enforced by the ansi-c standard, right?
Anyway, thanks.
Acked-by: Yuval Mintz <redacted>
On Wednesday, September 7, 2016 12:31:03 PM CEST Yuval Mintz wrote:
quoted
quoted
While I obviously have no strong objection for including
qed_selftest.h from qed_selftest.c, I'm not sure I understand which C
standard dictates this requirement.
Why should a function definition [not call] be preceded by a prototype?
- When a function is defined in one file and used in another, you want both files to include the same header that has the declaration to ensure that the types are identical. There are cases where the prototype is changed after the fact in an incompatible way, causing silent data corruption on some configurations but maybe not on others.
O.k., motivation is clear.
But this really isn't enforced by the ansi-c standard, right?
No, ansi-c doesn't enforce this, and even the regular kernel build
flags don't enable the warning in question, we only get it when
either building with "make C=1" using sparse, or "make W=1" to
enable extra warnings from gcc.
The warning is however really useful, and I hope that we go through
all drivers in the kernel and eliminate these warnings in order
to turn them on by default for all drivers.
We get 4 warnings when building kernel with W=1:
drivers/net/ethernet/qlogic/qed/qed_selftest.c:6:5: warning: no previous prototype for 'qed_selftest_memory' [-Wmissing-prototypes]
drivers/net/ethernet/qlogic/qed/qed_selftest.c:19:5: warning: no previous prototype for 'qed_selftest_interrupt' [-Wmissing-prototypes]
drivers/net/ethernet/qlogic/qed/qed_selftest.c:32:5: warning: no previous prototype for 'qed_selftest_register' [-Wmissing-prototypes]
drivers/net/ethernet/qlogic/qed/qed_selftest.c:55:5: warning: no previous prototype for 'qed_selftest_clock' [-Wmissing-prototypes]
In fact, these functions are declared in qed_selftest.h, so this patch
add missing header dependencies.
Signed-off-by: Baoyou Xie <redacted>