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