[cfe-commits] r46074 - in /cfe/trunk: Analysis/GRConstants.cpp Analysis/GREngine.cpp Driver/ASTConsumers.cpp Driver/ASTConsumers.h Driver/clang.cpp include/clang/Analysis/PathSensitive/ExplodedGraph.h include/clang/Analysis/PathSensitive/GREngine.h include/clang/Analysis/PathSensitive/GRWorkList.h
Ted Kremenek
kremenek at apple.com
Wed Jan 16 10:18:48 PST 2008
Author: kremenek
Date: Wed Jan 16 12:18:48 2008
New Revision: 46074
URL: http://llvm.org/viewvc/llvm-project?rev=46074&view=rev
Log:
Hooked up the GRConstants analysis to the driver.
Fixed some compilation errors with GREngine that showed up during
template instantiation.
Modified:
cfe/trunk/Analysis/GRConstants.cpp
cfe/trunk/Analysis/GREngine.cpp
cfe/trunk/Driver/ASTConsumers.cpp
cfe/trunk/Driver/ASTConsumers.h
cfe/trunk/Driver/clang.cpp
cfe/trunk/include/clang/Analysis/PathSensitive/ExplodedGraph.h
cfe/trunk/include/clang/Analysis/PathSensitive/GREngine.h
cfe/trunk/include/clang/Analysis/PathSensitive/GRWorkList.h
Modified: cfe/trunk/Analysis/GRConstants.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/Analysis/GRConstants.cpp?rev=46074&r1=46073&r2=46074&view=diff
==============================================================================
--- cfe/trunk/Analysis/GRConstants.cpp (original)
+++ cfe/trunk/Analysis/GRConstants.cpp Wed Jan 16 12:18:48 2008
@@ -288,4 +288,14 @@
void GRConstants::VisitBinSub(BinaryOperator* B) {
AddBinding(B, GetBinding(B->getLHS()) - GetBinding(B->getRHS()));
}
-
\ No newline at end of file
+
+//===----------------------------------------------------------------------===//
+// Driver.
+//===----------------------------------------------------------------------===//
+
+namespace clang {
+void RunGRConstants(CFG& cfg) {
+ GREngine<GRConstants> Engine(cfg);
+ Engine.ExecuteWorkList();
+}
+}
Modified: cfe/trunk/Analysis/GREngine.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/Analysis/GREngine.cpp?rev=46074&r1=46073&r2=46074&view=diff
==============================================================================
--- cfe/trunk/Analysis/GREngine.cpp (original)
+++ cfe/trunk/Analysis/GREngine.cpp Wed Jan 16 12:18:48 2008
@@ -44,6 +44,10 @@
};
} // end anonymous namespace
+// Place the dstor for GRWorkList here because it contains virtual member
+// functions, and we the code for the dstor generated in one compilation unit.
+GRWorkList::~GRWorkList() {}
+
GRWorkList* GRWorkList::MakeDFS() { return new DFS(); }
/// ExecuteWorkList - Run the worklist algorithm for a maximum number of steps.
Modified: cfe/trunk/Driver/ASTConsumers.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/Driver/ASTConsumers.cpp?rev=46074&r1=46073&r2=46074&view=diff
==============================================================================
--- cfe/trunk/Driver/ASTConsumers.cpp (original)
+++ cfe/trunk/Driver/ASTConsumers.cpp Wed Jan 16 12:18:48 2008
@@ -19,6 +19,7 @@
#include "clang/AST/ASTConsumer.h"
#include "clang/AST/CFG.h"
#include "clang/Analysis/Analyses/LiveVariables.h"
+#include "clang/Analysis/Analyses/GRConstants.h"
#include "clang/Analysis/LocalCheckers.h"
#include "llvm/Support/Streams.h"
#include <fstream>
@@ -562,22 +563,21 @@
}
//===----------------------------------------------------------------------===//
-// GRConstProp - Perform intra-procedural, path-sensitive constant propagation.
+// GRConstants - Perform intra-procedural, path-sensitive constant propagation.
namespace {
- class GRConstPropVisitor : public CFGVisitor {
+ class GRConstantsVisitor : public CFGVisitor {
public:
virtual void Initialize(ASTContext &Context) {}
virtual void VisitCFG(CFG& C) {
- // FIXME: Implement.
- assert (false && "Not yet implemented.");
+ RunGRConstants(C);
}
};
} // end anonymous namespace
-ASTConsumer *clang::CreateGRConstProp() {
- return new GRConstPropVisitor();
+ASTConsumer *clang::CreateGRConstants() {
+ return new GRConstantsVisitor();
}
//===----------------------------------------------------------------------===//
Modified: cfe/trunk/Driver/ASTConsumers.h
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/Driver/ASTConsumers.h?rev=46074&r1=46073&r2=46074&view=diff
==============================================================================
--- cfe/trunk/Driver/ASTConsumers.h (original)
+++ cfe/trunk/Driver/ASTConsumers.h Wed Jan 16 12:18:48 2008
@@ -39,7 +39,7 @@
ASTConsumer *CreateUnitValsChecker(Diagnostic &Diags);
-ASTConsumer *CreateGRConstProp();
+ASTConsumer *CreateGRConstants();
ASTConsumer *CreateLLVMEmitter(Diagnostic &Diags, const LangOptions &Features);
Modified: cfe/trunk/Driver/clang.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/Driver/clang.cpp?rev=46074&r1=46073&r2=46074&view=diff
==============================================================================
--- cfe/trunk/Driver/clang.cpp (original)
+++ cfe/trunk/Driver/clang.cpp Wed Jan 16 12:18:48 2008
@@ -64,7 +64,7 @@
ParseCFGDump, // Parse ASTS. Build CFGs. Print CFGs.
ParseCFGView, // Parse ASTS. Build CFGs. View CFGs.
AnalysisLiveVariables, // Print results of live-variable analysis.
- AnalysisGRConstProp, // Perform graph-reachability constant prop.
+ AnalysisGRConstants, // Perform graph-reachability constant prop.
WarnDeadStores, // Run DeadStores checker on parsed ASTs.
WarnDeadStoresCheck, // Check diagnostics for "DeadStores".
WarnUninitVals, // Run UnitializedVariables checker.
@@ -109,7 +109,7 @@
"Flag warnings of stores to dead variables."),
clEnumValN(WarnUninitVals, "warn-uninit-values",
"Flag warnings of uses of unitialized variables."),
- clEnumValN(AnalysisGRConstProp, "gr-const-prop",
+ clEnumValN(AnalysisGRConstants, "gr-const-prop",
"Perform path-sensitive constant propagation."),
clEnumValN(TestSerialization, "test-pickling",
"Run prototype serializtion code."),
@@ -947,8 +947,8 @@
case WarnUninitVals:
return CreateUnitValsChecker(Diag);
- case AnalysisGRConstProp:
- return CreateGRConstProp();
+ case AnalysisGRConstants:
+ return CreateGRConstants();
case TestSerialization:
return CreateSerializationTest(Diag, FileMgr, LangOpts);
Modified: cfe/trunk/include/clang/Analysis/PathSensitive/ExplodedGraph.h
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/Analysis/PathSensitive/ExplodedGraph.h?rev=46074&r1=46073&r2=46074&view=diff
==============================================================================
--- cfe/trunk/include/clang/Analysis/PathSensitive/ExplodedGraph.h (original)
+++ cfe/trunk/include/clang/Analysis/PathSensitive/ExplodedGraph.h Wed Jan 16 12:18:48 2008
@@ -40,9 +40,17 @@
enum { Size1 = 0x0, SizeOther = 0x1, Infeasible = 0x2, Flags = 0x3 };
uintptr_t P;
- unsigned getKind() const { return P & Flags; }
- void* getPtr() const { return reinterpret_cast<void*>(P & ~Flags); }
- ExplodedNodeImpl* getNode() const;
+ unsigned getKind() const {
+ return P & Flags;
+ }
+
+ void* getPtr() const {
+ return reinterpret_cast<void*>(P & ~Flags);
+ }
+
+ ExplodedNodeImpl* getNode() const {
+ return reinterpret_cast<ExplodedNodeImpl*>(getPtr());
+ }
public:
NodeGroup() : P(0) {}
@@ -136,8 +144,8 @@
public:
/// Construct a ExplodedNodeImpl with the given node ID, program edge,
/// and state.
- explicit ExplodedNode(unsigned ID, const ProgramPoint& loc, StateTy state)
- : ExplodedNodeImpl(ID, loc, GRTrait<StateTy>::toPtr(state)) {}
+ explicit ExplodedNode(const ProgramPoint& loc, StateTy state)
+ : ExplodedNodeImpl(loc, GRTrait<StateTy>::toPtr(state)) {}
/// getState - Returns the state associated with the node.
inline StateTy getState() const {
@@ -186,13 +194,7 @@
typedef llvm::DenseMap<ProgramPoint,void*> EdgeNodeSetMap;
typedef llvm::SmallVector<ExplodedNodeImpl*,2> RootsTy;
typedef llvm::SmallVector<ExplodedNodeImpl*,10> EndNodesTy;
-
- /// NodeCounter - The number of nodes that have been created, although
- /// this need not be the current number of nodes in the graph that
- /// are reachable from the roots. This counter is used to assign a unique
- /// number to each node (which is useful for debugging).
- unsigned NodeCounter;
-
+
/// Roots - The roots of the simulation graph. Usually there will be only
/// one, but clients are free to establish multiple subgraphs within a single
/// SimulGraph. Moreover, these subgraphs can often merge when paths from
@@ -232,7 +234,6 @@
unsigned num_roots() const { return Roots.size(); }
unsigned num_eops() const { return EndNodes.size(); }
- unsigned getCounter() const { return NodeCounter; }
};
template <typename CHECKER>
@@ -248,7 +249,7 @@
protected:
virtual ExplodedNodeImpl*
getNodeImpl(const ProgramPoint& L, void* State, bool* IsNew) {
- return getNode(L,GRTrait<StateTy>::toState(State),IsNew);
+ return getNode(L, GRTrait<StateTy>::toState(State), IsNew);
}
public:
@@ -275,15 +276,15 @@
void* InsertPos = 0;
StateTy::Profile(profile, State);
- NodeTy* V = VSet.FindNodeOrInsertPos(profile, InsertPos);
+ NodeTy* V = VSet->FindNodeOrInsertPos(profile, InsertPos);
if (!V) {
// Allocate a new node.
V = (NodeTy*) Allocator.Allocate<NodeTy>();
- new (V) NodeTy(NodeCounter++, L, State);
+ new (V) NodeTy(L, State);
// Insert the node into the node set and return it.
- VSet.InsertNode(V, InsertPos);
+ VSet->InsertNode(V, InsertPos);
if (IsNew) *IsNew = true;
}
Modified: cfe/trunk/include/clang/Analysis/PathSensitive/GREngine.h
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/Analysis/PathSensitive/GREngine.h?rev=46074&r1=46073&r2=46074&view=diff
==============================================================================
--- cfe/trunk/include/clang/Analysis/PathSensitive/GREngine.h (original)
+++ cfe/trunk/include/clang/Analysis/PathSensitive/GREngine.h Wed Jan 16 12:18:48 2008
@@ -173,7 +173,7 @@
virtual void* getInitialState() {
- return GRTrait<StateTy>::toPtr(getCheckerState()->getInitialState());
+ return GRTrait<StateTy>::toPtr(getCheckerState().getInitialState());
}
virtual void* ProcessEOP(CFGBlock* Blk, void* State) {
Modified: cfe/trunk/include/clang/Analysis/PathSensitive/GRWorkList.h
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/Analysis/PathSensitive/GRWorkList.h?rev=46074&r1=46073&r2=46074&view=diff
==============================================================================
--- cfe/trunk/include/clang/Analysis/PathSensitive/GRWorkList.h (original)
+++ cfe/trunk/include/clang/Analysis/PathSensitive/GRWorkList.h Wed Jan 16 12:18:48 2008
@@ -38,7 +38,7 @@
class GRWorkList {
public:
- virtual ~GRWorkList() = 0;
+ virtual ~GRWorkList();
virtual bool hasWork() const = 0;
virtual void Enqueue(const GRWorkListUnit& U) = 0;
More information about the cfe-commits
mailing list