162306a36Sopenharmony_ci// SPDX-License-Identifier: GPL-2.0-only
262306a36Sopenharmony_ci///
362306a36Sopenharmony_ci/// Remove unneeded semicolon.
462306a36Sopenharmony_ci///
562306a36Sopenharmony_ci// Confidence: Moderate
662306a36Sopenharmony_ci// Copyright: (C) 2012 Peter Senna Tschudin, INRIA/LIP6.
762306a36Sopenharmony_ci// URL: https://coccinelle.gitlabpages.inria.fr/website
862306a36Sopenharmony_ci// Comments: Some false positives on empty default cases in switch statements.
962306a36Sopenharmony_ci// Options: --no-includes --include-headers
1062306a36Sopenharmony_ci
1162306a36Sopenharmony_civirtual patch
1262306a36Sopenharmony_civirtual report
1362306a36Sopenharmony_civirtual context
1462306a36Sopenharmony_civirtual org
1562306a36Sopenharmony_ci
1662306a36Sopenharmony_ci@r_default@
1762306a36Sopenharmony_ciposition p;
1862306a36Sopenharmony_ci@@
1962306a36Sopenharmony_ciswitch (...)
2062306a36Sopenharmony_ci{
2162306a36Sopenharmony_cidefault: ...;@p
2262306a36Sopenharmony_ci}
2362306a36Sopenharmony_ci
2462306a36Sopenharmony_ci@r_case@
2562306a36Sopenharmony_ciposition p;
2662306a36Sopenharmony_ci@@
2762306a36Sopenharmony_ci(
2862306a36Sopenharmony_ciswitch (...)
2962306a36Sopenharmony_ci{
3062306a36Sopenharmony_cicase ...:;@p
3162306a36Sopenharmony_ci}
3262306a36Sopenharmony_ci|
3362306a36Sopenharmony_ciswitch (...)
3462306a36Sopenharmony_ci{
3562306a36Sopenharmony_cicase ...:...
3662306a36Sopenharmony_cicase ...:;@p
3762306a36Sopenharmony_ci}
3862306a36Sopenharmony_ci|
3962306a36Sopenharmony_ciswitch (...)
4062306a36Sopenharmony_ci{
4162306a36Sopenharmony_cicase ...:...
4262306a36Sopenharmony_cicase ...:
4362306a36Sopenharmony_cicase ...:;@p
4462306a36Sopenharmony_ci}
4562306a36Sopenharmony_ci)
4662306a36Sopenharmony_ci
4762306a36Sopenharmony_ci@r1@
4862306a36Sopenharmony_cistatement S;
4962306a36Sopenharmony_ciposition p1;
5062306a36Sopenharmony_ciposition p != {r_default.p, r_case.p};
5162306a36Sopenharmony_ciidentifier label;
5262306a36Sopenharmony_ci@@
5362306a36Sopenharmony_ci(
5462306a36Sopenharmony_cilabel:;
5562306a36Sopenharmony_ci|
5662306a36Sopenharmony_ciS@p1;@p
5762306a36Sopenharmony_ci)
5862306a36Sopenharmony_ci
5962306a36Sopenharmony_ci@script:python@
6062306a36Sopenharmony_cip << r1.p;
6162306a36Sopenharmony_cip1 << r1.p1;
6262306a36Sopenharmony_ci@@
6362306a36Sopenharmony_ciif p[0].line != p1[0].line_end:
6462306a36Sopenharmony_ci	cocci.include_match(False)
6562306a36Sopenharmony_ci
6662306a36Sopenharmony_ci@depends on patch@
6762306a36Sopenharmony_ciposition r1.p;
6862306a36Sopenharmony_ci@@
6962306a36Sopenharmony_ci-;@p
7062306a36Sopenharmony_ci
7162306a36Sopenharmony_ci@script:python depends on report@
7262306a36Sopenharmony_cip << r1.p;
7362306a36Sopenharmony_ci@@
7462306a36Sopenharmony_cicoccilib.report.print_report(p[0],"Unneeded semicolon")
7562306a36Sopenharmony_ci
7662306a36Sopenharmony_ci@depends on context@
7762306a36Sopenharmony_ciposition r1.p;
7862306a36Sopenharmony_ci@@
7962306a36Sopenharmony_ci*;@p
8062306a36Sopenharmony_ci
8162306a36Sopenharmony_ci@script:python depends on org@
8262306a36Sopenharmony_cip << r1.p;
8362306a36Sopenharmony_ci@@
8462306a36Sopenharmony_cicocci.print_main("Unneeded semicolon",p)
85