@@ -17,32 +17,9 @@ class FreeCall extends FunctionCall {
17
17
FreeCall ( ) { this .getTarget ( ) .hasGlobalName ( "free" ) }
18
18
}
19
19
20
- from IfStmt stmt , FreeCall fc , Variable v
20
+ from GuardCondition gc , FreeCall fc , Variable v , BasicBlock bb
21
21
where
22
- stmt .getThen ( ) = fc .getEnclosingStmt ( ) and
23
- (
24
- stmt .getCondition ( ) = v .getAnAccess ( ) and
25
- fc .getArgument ( 0 ) = v .getAnAccess ( )
26
- or
27
- exists ( PointerDereferenceExpr cond , PointerDereferenceExpr arg |
28
- fc .getArgument ( 0 ) = arg and
29
- stmt .getCondition ( ) = cond and
30
- cond .getOperand + ( ) = v .getAnAccess ( ) and
31
- arg .getOperand + ( ) = v .getAnAccess ( )
32
- )
33
- or
34
- exists ( ArrayExpr cond , ArrayExpr arg |
35
- fc .getArgument ( 0 ) = arg and
36
- stmt .getCondition ( ) = cond and
37
- cond .getArrayBase + ( ) = v .getAnAccess ( ) and
38
- arg .getArrayBase + ( ) = v .getAnAccess ( )
39
- )
40
- or
41
- exists ( NEExpr eq |
42
- fc .getArgument ( 0 ) = v .getAnAccess ( ) and
43
- stmt .getCondition ( ) = eq and
44
- eq .getAnOperand ( ) = v .getAnAccess ( ) and
45
- eq .getAnOperand ( ) .getValue ( ) = "0"
46
- )
47
- )
48
- select stmt , "unnecessary NULL check before call to $@" , fc , "free"
22
+ gc .ensuresEq ( v .getAnAccess ( ) , 0 , bb , false ) and
23
+ fc .getArgument ( 0 ) = v .getAnAccess ( ) and
24
+ bb = fc .getEnclosingStmt ( )
25
+ select gc , "unnecessary NULL check before call to $@" , fc , "free"
0 commit comments