All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH RFC] Coccinelle: Check for return not matching function signature
@ 2015-05-05 10:12 ` Nicholas Mc Guire
  0 siblings, 0 replies; 25+ messages in thread
From: Nicholas Mc Guire @ 2015-05-05 10:12 UTC (permalink / raw)
  To: Julia Lawall
  Cc: Gilles Muller, Nicolas Palix, Michal Marek, cocci, linux-kernel,
	Nicholas Mc Guire

Check if the signature of a function and the return value type match. This
is currently not the case in more than 2300 functions. In many cases this
mismatch will have no side-effects but in some cases it may lead to hard
to locate problems - and for readability and code understanding it is also
helpful when types match.

Signed-off-by: Nicholas Mc Guire <hofrat@osadl.org>
---

Did not see any false positives in a scan of 4.0-rc2 (but did not check
all results either).

Not sure if scripts/coccinelle/tests/ is the right place for this
It did not seem to trigger any false positives but in some cases (notably
void pointers) the warning might be unnecessary.

The output is a bit lengthy - not sure if that is too much but it seemed
useful to me to see the non-matching types explicitly in the warning
message.

Patch is against 4.1-rc2 (localversion-next is -next-20150505)

 .../coccinelle/tests/signature_matches_ret.cocci   |   31 ++++++++++++++++++++
 1 file changed, 31 insertions(+)
 create mode 100644 scripts/coccinelle/tests/signature_matches_ret.cocci

diff --git a/scripts/coccinelle/tests/signature_matches_ret.cocci b/scripts/coccinelle/tests/signature_matches_ret.cocci
new file mode 100644
index 0000000..2dd1086
--- /dev/null
+++ b/scripts/coccinelle/tests/signature_matches_ret.cocci
@@ -0,0 +1,31 @@
+// Find functions where return type and signature do not match
+// Comments:
+// Options: --no-includes --include-headers
+
+virtual context
+virtual org
+virtual report
+
+@match@
+identifier f,ret;
+position p;
+type T1,T2;
+@@
+
+T1 f(...) {
+ T2 ret;
+<+...
+* return@p ret
+;
+...+>
+}
+
+@script:python@
+p << match.p;
+fn << match.f;
+T1 << match.T1;
+T2 << match.T2;
+@@
+
+if T1 != T2:
+   print "%s:%s,%s WARNING: return of wrong type (%s != %s)" % (p[0].file,fn,p[0].line,T1,T2)
-- 
1.7.10.4


^ permalink raw reply related	[flat|nested] 25+ messages in thread

end of thread, other threads:[~2015-05-08  6:59 UTC | newest]

Thread overview: 25+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2015-05-05 10:12 [PATCH RFC] Coccinelle: Check for return not matching function signature Nicholas Mc Guire
2015-05-05 10:12 ` [Cocci] " Nicholas Mc Guire
2015-05-05 12:32 ` SF Markus Elfring
2015-05-05 12:32   ` [Cocci] " SF Markus Elfring
2015-05-05 13:04   ` Nicholas Mc Guire
2015-05-05 13:04     ` [Cocci] " Nicholas Mc Guire
2015-05-05 13:29     ` Julia Lawall
2015-05-05 13:29       ` Julia Lawall
2015-05-05 13:45     ` SF Markus Elfring
2015-05-05 13:45       ` [Cocci] " SF Markus Elfring
2015-05-05 14:40 ` Julia Lawall
2015-05-05 14:40   ` [Cocci] " Julia Lawall
2015-05-05 16:00   ` Nicholas Mc Guire
2015-05-05 16:00     ` [Cocci] " Nicholas Mc Guire
2015-05-05 21:24     ` Julia Lawall
2015-05-05 21:24       ` [Cocci] " Julia Lawall
2015-05-08  6:59       ` Nicholas Mc Guire
2015-05-08  6:59         ` [Cocci] " Nicholas Mc Guire
2015-05-05 16:25   ` SF Markus Elfring
2015-05-05 16:25     ` [Cocci] " SF Markus Elfring
2015-05-05 21:46     ` Julia Lawall
2015-05-05 21:46       ` [Cocci] " Julia Lawall
2015-05-06  7:15 ` SF Markus Elfring
2015-05-06  7:15   ` [Cocci] " SF Markus Elfring
2015-05-06  7:15   ` SF Markus Elfring

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.