84 lines
		
	
	
	
		
			1 KiB
			
		
	
	
	
		
			Text
		
	
	
	
	
	
		
		
			
		
	
	
			84 lines
		
	
	
	
		
			1 KiB
			
		
	
	
	
		
			Text
		
	
	
	
	
	
| 
								 | 
							
								///
							 | 
						||
| 
								 | 
							
								/// Removes unneeded semicolon.
							 | 
						||
| 
								 | 
							
								///
							 | 
						||
| 
								 | 
							
								// Confidence: Moderate
							 | 
						||
| 
								 | 
							
								// Copyright: (C) 2012 Peter Senna Tschudin, INRIA/LIP6.  GPLv2.
							 | 
						||
| 
								 | 
							
								// 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)
							 |