|
@@ -0,0 +1,83 @@
|
|
|
+///
|
|
|
+/// Removes unneeded semicolon.
|
|
|
+///
|
|
|
+// Confidence: Moderate
|
|
|
+// Copyright: (C) 2012 Peter Senna Tschudin, INRIA/LIP6. GPLv2.
|
|
|
+// URL: http://coccinelle.lip6.fr/
|
|
|
+// Comments: Some false positives on empty default cases in switch statements.
|
|
|
+// Options: --no-includes --include-headers
|
|
|
+
|
|
|
+virtual patch
|
|
|
+virtual report
|
|
|
+virtual context
|
|
|
+virtual org
|
|
|
+
|
|
|
+@r_default@
|
|
|
+position p;
|
|
|
+@@
|
|
|
+switch (...)
|
|
|
+{
|
|
|
+default: ...;@p
|
|
|
+}
|
|
|
+
|
|
|
+@r_case@
|
|
|
+position p;
|
|
|
+@@
|
|
|
+(
|
|
|
+switch (...)
|
|
|
+{
|
|
|
+case ...:;@p
|
|
|
+}
|
|
|
+|
|
|
|
+switch (...)
|
|
|
+{
|
|
|
+case ...:...
|
|
|
+case ...:;@p
|
|
|
+}
|
|
|
+|
|
|
|
+switch (...)
|
|
|
+{
|
|
|
+case ...:...
|
|
|
+case ...:
|
|
|
+case ...:;@p
|
|
|
+}
|
|
|
+)
|
|
|
+
|
|
|
+@r1@
|
|
|
+statement S;
|
|
|
+position p1;
|
|
|
+position p != {r_default.p, r_case.p};
|
|
|
+identifier label;
|
|
|
+@@
|
|
|
+(
|
|
|
+label:;
|
|
|
+|
|
|
|
+S@p1;@p
|
|
|
+)
|
|
|
+
|
|
|
+@script:python@
|
|
|
+p << r1.p;
|
|
|
+p1 << r1.p1;
|
|
|
+@@
|
|
|
+if p[0].line != p1[0].line_end:
|
|
|
+ cocci.include_match(False)
|
|
|
+
|
|
|
+@depends on patch@
|
|
|
+position r1.p;
|
|
|
+@@
|
|
|
+-;@p
|
|
|
+
|
|
|
+@script:python depends on report@
|
|
|
+p << r1.p;
|
|
|
+@@
|
|
|
+coccilib.report.print_report(p[0],"Unneeded semicolon")
|
|
|
+
|
|
|
+@depends on context@
|
|
|
+position r1.p;
|
|
|
+@@
|
|
|
+*;@p
|
|
|
+
|
|
|
+@script:python depends on org@
|
|
|
+p << r1.p;
|
|
|
+@@
|
|
|
+cocci.print_main("Unneeded semicolon",p)
|