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