18c2ecf20Sopenharmony_ci// SPDX-License-Identifier: GPL-2.0-only
28c2ecf20Sopenharmony_ci///
38c2ecf20Sopenharmony_ci/// Remove unneeded semicolon.
48c2ecf20Sopenharmony_ci///
58c2ecf20Sopenharmony_ci// Confidence: Moderate
68c2ecf20Sopenharmony_ci// Copyright: (C) 2012 Peter Senna Tschudin, INRIA/LIP6.
78c2ecf20Sopenharmony_ci// URL: http://coccinelle.lip6.fr/
88c2ecf20Sopenharmony_ci// Comments: Some false positives on empty default cases in switch statements.
98c2ecf20Sopenharmony_ci// Options: --no-includes --include-headers
108c2ecf20Sopenharmony_ci
118c2ecf20Sopenharmony_civirtual patch
128c2ecf20Sopenharmony_civirtual report
138c2ecf20Sopenharmony_civirtual context
148c2ecf20Sopenharmony_civirtual org
158c2ecf20Sopenharmony_ci
168c2ecf20Sopenharmony_ci@r_default@
178c2ecf20Sopenharmony_ciposition p;
188c2ecf20Sopenharmony_ci@@
198c2ecf20Sopenharmony_ciswitch (...)
208c2ecf20Sopenharmony_ci{
218c2ecf20Sopenharmony_cidefault: ...;@p
228c2ecf20Sopenharmony_ci}
238c2ecf20Sopenharmony_ci
248c2ecf20Sopenharmony_ci@r_case@
258c2ecf20Sopenharmony_ciposition p;
268c2ecf20Sopenharmony_ci@@
278c2ecf20Sopenharmony_ci(
288c2ecf20Sopenharmony_ciswitch (...)
298c2ecf20Sopenharmony_ci{
308c2ecf20Sopenharmony_cicase ...:;@p
318c2ecf20Sopenharmony_ci}
328c2ecf20Sopenharmony_ci|
338c2ecf20Sopenharmony_ciswitch (...)
348c2ecf20Sopenharmony_ci{
358c2ecf20Sopenharmony_cicase ...:...
368c2ecf20Sopenharmony_cicase ...:;@p
378c2ecf20Sopenharmony_ci}
388c2ecf20Sopenharmony_ci|
398c2ecf20Sopenharmony_ciswitch (...)
408c2ecf20Sopenharmony_ci{
418c2ecf20Sopenharmony_cicase ...:...
428c2ecf20Sopenharmony_cicase ...:
438c2ecf20Sopenharmony_cicase ...:;@p
448c2ecf20Sopenharmony_ci}
458c2ecf20Sopenharmony_ci)
468c2ecf20Sopenharmony_ci
478c2ecf20Sopenharmony_ci@r1@
488c2ecf20Sopenharmony_cistatement S;
498c2ecf20Sopenharmony_ciposition p1;
508c2ecf20Sopenharmony_ciposition p != {r_default.p, r_case.p};
518c2ecf20Sopenharmony_ciidentifier label;
528c2ecf20Sopenharmony_ci@@
538c2ecf20Sopenharmony_ci(
548c2ecf20Sopenharmony_cilabel:;
558c2ecf20Sopenharmony_ci|
568c2ecf20Sopenharmony_ciS@p1;@p
578c2ecf20Sopenharmony_ci)
588c2ecf20Sopenharmony_ci
598c2ecf20Sopenharmony_ci@script:python@
608c2ecf20Sopenharmony_cip << r1.p;
618c2ecf20Sopenharmony_cip1 << r1.p1;
628c2ecf20Sopenharmony_ci@@
638c2ecf20Sopenharmony_ciif p[0].line != p1[0].line_end:
648c2ecf20Sopenharmony_ci	cocci.include_match(False)
658c2ecf20Sopenharmony_ci
668c2ecf20Sopenharmony_ci@depends on patch@
678c2ecf20Sopenharmony_ciposition r1.p;
688c2ecf20Sopenharmony_ci@@
698c2ecf20Sopenharmony_ci-;@p
708c2ecf20Sopenharmony_ci
718c2ecf20Sopenharmony_ci@script:python depends on report@
728c2ecf20Sopenharmony_cip << r1.p;
738c2ecf20Sopenharmony_ci@@
748c2ecf20Sopenharmony_cicoccilib.report.print_report(p[0],"Unneeded semicolon")
758c2ecf20Sopenharmony_ci
768c2ecf20Sopenharmony_ci@depends on context@
778c2ecf20Sopenharmony_ciposition r1.p;
788c2ecf20Sopenharmony_ci@@
798c2ecf20Sopenharmony_ci*;@p
808c2ecf20Sopenharmony_ci
818c2ecf20Sopenharmony_ci@script:python depends on org@
828c2ecf20Sopenharmony_cip << r1.p;
838c2ecf20Sopenharmony_ci@@
848c2ecf20Sopenharmony_cicocci.print_main("Unneeded semicolon",p)
85