[cfe-commits] r167340 - /cfe/trunk/lib/StaticAnalyzer/Checkers/SimpleStreamChecker.cpp
Jordan Rose
jordan_rose at apple.com
Fri Nov 2 16:49:35 PDT 2012
Author: jrose
Date: Fri Nov 2 18:49:35 2012
New Revision: 167340
URL: http://llvm.org/viewvc/llvm-project?rev=167340&view=rev
Log:
[analyzer] Convert SimpleStreamChecker over to CallEvent.
Modified:
cfe/trunk/lib/StaticAnalyzer/Checkers/SimpleStreamChecker.cpp
Modified: cfe/trunk/lib/StaticAnalyzer/Checkers/SimpleStreamChecker.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/StaticAnalyzer/Checkers/SimpleStreamChecker.cpp?rev=167340&r1=167339&r2=167340&view=diff
==============================================================================
--- cfe/trunk/lib/StaticAnalyzer/Checkers/SimpleStreamChecker.cpp (original)
+++ cfe/trunk/lib/StaticAnalyzer/Checkers/SimpleStreamChecker.cpp Fri Nov 2 18:49:35 2012
@@ -18,6 +18,7 @@
#include "ClangSACheckers.h"
#include "clang/StaticAnalyzer/Core/Checker.h"
#include "clang/StaticAnalyzer/Core/BugReporter/BugType.h"
+#include "clang/StaticAnalyzer/Core/PathSensitive/CallEvent.h"
#include "clang/StaticAnalyzer/Core/PathSensitive/CheckerContext.h"
using namespace clang;
@@ -46,8 +47,8 @@
}
};
-class SimpleStreamChecker : public Checker<check::PostStmt<CallExpr>,
- check::PreStmt<CallExpr>,
+class SimpleStreamChecker : public Checker<check::PostCall,
+ check::PreCall,
check::DeadSymbols > {
mutable IdentifierInfo *IIfopen, *IIfclose;
@@ -58,7 +59,7 @@
void initIdentifierInfo(ASTContext &Ctx) const;
void reportDoubleClose(SymbolRef FileDescSym,
- const CallExpr *Call,
+ const CallEvent &Call,
CheckerContext &C) const;
void reportLeaks(SymbolVector LeakedStreams,
@@ -69,9 +70,9 @@
SimpleStreamChecker();
/// Process fopen.
- void checkPostStmt(const CallExpr *Call, CheckerContext &C) const;
+ void checkPostCall(const CallEvent &Call, CheckerContext &C) const;
/// Process fclose.
- void checkPreStmt(const CallExpr *Call, CheckerContext &C) const;
+ void checkPreCall(const CallEvent &Call, CheckerContext &C) const;
void checkDeadSymbols(SymbolReaper &SymReaper, CheckerContext &C) const;
};
@@ -93,15 +94,18 @@
LeakBugType->setSuppressOnSink(true);
}
-void SimpleStreamChecker::checkPostStmt(const CallExpr *Call,
+void SimpleStreamChecker::checkPostCall(const CallEvent &Call,
CheckerContext &C) const {
initIdentifierInfo(C.getASTContext());
- if (C.getCalleeIdentifier(Call) != IIfopen)
+ if (!Call.isGlobalCFunction())
+ return;
+
+ if (Call.getCalleeIdentifier() != IIfopen)
return;
// Get the symbolic value corresponding to the file handle.
- SymbolRef FileDesc = C.getSVal(Call).getAsSymbol();
+ SymbolRef FileDesc = Call.getReturnValue().getAsSymbol();
if (!FileDesc)
return;
@@ -111,15 +115,21 @@
C.addTransition(State);
}
-void SimpleStreamChecker::checkPreStmt(const CallExpr *Call,
+void SimpleStreamChecker::checkPreCall(const CallEvent &Call,
CheckerContext &C) const {
initIdentifierInfo(C.getASTContext());
- if (C.getCalleeIdentifier(Call) != IIfclose || Call->getNumArgs() != 1)
+ if (!Call.isGlobalCFunction())
+ return;
+
+ if (Call.getCalleeIdentifier() != IIfclose)
+ return;
+
+ if (Call.getNumArgs() != 1)
return;
// Get the symbolic value corresponding to the file handle.
- SymbolRef FileDesc = C.getSVal(Call->getArg(0)).getAsSymbol();
+ SymbolRef FileDesc = Call.getArgSVal(0).getAsSymbol();
if (!FileDesc)
return;
@@ -172,7 +182,7 @@
}
void SimpleStreamChecker::reportDoubleClose(SymbolRef FileDescSym,
- const CallExpr *CallExpr,
+ const CallEvent &Call,
CheckerContext &C) const {
// We reached a bug, stop exploring the path here by generating a sink.
ExplodedNode *ErrNode = C.generateSink();
@@ -183,7 +193,7 @@
// Generate the report.
BugReport *R = new BugReport(*DoubleCloseBugType,
"Closing a previously closed file stream", ErrNode);
- R->addRange(CallExpr->getSourceRange());
+ R->addRange(Call.getSourceRange());
R->markInteresting(FileDescSym);
C.emitReport(R);
}
More information about the cfe-commits
mailing list