Coccinelle: Add iterators/itnull.cocci
Many iterators have the property that the first argument is always bound to a real list element, never NULL. False positives arise for some iterators that do not have this property, or in cases when the loop cursor is reassigned. The latter should only happen when the matched code is on the way to a loop exit (break, goto, or return). Signed-off-by: Nicolas Palix <npalix@diku.dk> Signed-off-by: Julia Lawall <julia@diku.dk> Signed-off-by: Michal Marek <mmarek@suse.cz>
This commit is contained in:
		
							parent
							
								
									4045159253
								
							
						
					
					
						commit
						afc48a82fa
					
				
							
								
								
									
										58
									
								
								scripts/coccinelle/iterators/itnull.cocci
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										58
									
								
								scripts/coccinelle/iterators/itnull.cocci
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,58 @@
 | 
			
		||||
/// Many iterators have the property that the first argument is always bound
 | 
			
		||||
/// to a real list element, never NULL.  False positives arise for some
 | 
			
		||||
/// iterators that do not have this property, or in cases when the loop
 | 
			
		||||
/// cursor is reassigned.  The latter should only happen when the matched
 | 
			
		||||
/// code is on the way to a loop exit (break, goto, or return).
 | 
			
		||||
///
 | 
			
		||||
// Confidence: Moderate
 | 
			
		||||
// Copyright: (C) 2010 Nicolas Palix, DIKU.  GPLv2.
 | 
			
		||||
// Copyright: (C) 2010 Julia Lawall, DIKU.  GPLv2.
 | 
			
		||||
// Copyright: (C) 2010 Gilles Muller, INRIA/LiP6.  GPLv2.
 | 
			
		||||
// URL: http://coccinelle.lip6.fr/
 | 
			
		||||
// Comments:
 | 
			
		||||
// Options: -no_includes -include_headers
 | 
			
		||||
 | 
			
		||||
virtual patch
 | 
			
		||||
 | 
			
		||||
@@
 | 
			
		||||
iterator I;
 | 
			
		||||
expression x,E,E1,E2;
 | 
			
		||||
statement S,S1,S2;
 | 
			
		||||
@@
 | 
			
		||||
 | 
			
		||||
I(x,...) { <...
 | 
			
		||||
(
 | 
			
		||||
- if (x == NULL && ...) S
 | 
			
		||||
|
 | 
			
		||||
- if (x != NULL || ...)
 | 
			
		||||
  S
 | 
			
		||||
|
 | 
			
		||||
- (x == NULL) ||
 | 
			
		||||
  E
 | 
			
		||||
|
 | 
			
		||||
- (x != NULL) &&
 | 
			
		||||
  E
 | 
			
		||||
|
 | 
			
		||||
- (x == NULL && ...) ? E1 :
 | 
			
		||||
  E2
 | 
			
		||||
|
 | 
			
		||||
- (x != NULL || ...) ?
 | 
			
		||||
  E1
 | 
			
		||||
- : E2
 | 
			
		||||
|
 | 
			
		||||
- if (x == NULL && ...) S1 else
 | 
			
		||||
  S2
 | 
			
		||||
|
 | 
			
		||||
- if (x != NULL || ...)
 | 
			
		||||
  S1
 | 
			
		||||
- else S2
 | 
			
		||||
|
 | 
			
		||||
+ BAD(
 | 
			
		||||
  x == NULL
 | 
			
		||||
+ )
 | 
			
		||||
|
 | 
			
		||||
+ BAD(
 | 
			
		||||
  x != NULL
 | 
			
		||||
+ )
 | 
			
		||||
)
 | 
			
		||||
  ...> }
 | 
			
		||||
		Loading…
	
		Reference in New Issue
	
	Block a user