/// | |
/// 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) |