|  | // SPDX-License-Identifier: GPL-2.0-only | 
|  | /// | 
|  | /// Remove unneeded semicolon. | 
|  | /// | 
|  | // Confidence: Moderate | 
|  | // Copyright: (C) 2012 Peter Senna Tschudin, INRIA/LIP6. | 
|  | // 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) |