#include "clang/AST/Type.h"
namespace clang {
+namespace GR {
namespace cocoa {
enum NamingConvention { NoConvention, CreateRule, InitRule };
bool isCocoaObjectRef(QualType T);
-}}
+}}}
#endif
//
//===----------------------------------------------------------------------===//
-#ifndef LLVM_CLANG_CHECKER_ANALYSISCONSUMER_H
-#define LLVM_CLANG_CHECKER_ANALYSISCONSUMER_H
+#ifndef LLVM_CLANG_GR_ANALYSISCONSUMER_H
+#define LLVM_CLANG_GR_ANALYSISCONSUMER_H
#include <string>
class ASTConsumer;
class Preprocessor;
+namespace GR {
+
/// CreateAnalysisConsumer - Creates an ASTConsumer to run various code
/// analysis passes. (The set of analyses run is controlled by command-line
/// options.)
const std::string &output,
const AnalyzerOptions& Opts);
-}
+} // end GR namespace
+
+} // end clang namespace
#endif
//
//===----------------------------------------------------------------------===//
-#ifndef LLVM_CLANG_ANALYSIS_BUGREPORTER
-#define LLVM_CLANG_ANALYSIS_BUGREPORTER
+#ifndef LLVM_CLANG_GR_BUGREPORTER
+#define LLVM_CLANG_GR_BUGREPORTER
#include "clang/Basic/SourceLocation.h"
#include "clang/GR/PathSensitive/GRState.h"
namespace clang {
+class ASTContext;
+class Diagnostic;
+class Stmt;
+class ParentMap;
+
+namespace GR {
+
class PathDiagnostic;
class PathDiagnosticPiece;
class PathDiagnosticClient;
-class ASTContext;
-class Diagnostic;
class ExplodedNode;
class ExplodedGraph;
class BugReporter;
class BugReporterContext;
class GRExprEngine;
class GRState;
-class Stmt;
class BugType;
-class ParentMap;
//===----------------------------------------------------------------------===//
// Interface for individual bug reports.
//===----------------------------------------------------------------------===//
+} // end GR namespace
+
} // end clang namespace
#endif
namespace clang {
+namespace GR {
+
class ExplodedNode;
class GRExprEngine;
llvm::StringRef getDescription() const { return desc; }
};
+} // end GR namespace
+
} // end clang namespace
#endif
class SourceManager;
class Stmt;
+namespace GR {
+
//===----------------------------------------------------------------------===//
// High-level interface for handlers of path-sensitive diagnostics.
//===----------------------------------------------------------------------===//
void Profile(llvm::FoldingSetNodeID &ID) const;
};
+
+} // end GR namespace
+
} //end clang namespace
+
#endif
//
//===----------------------------------------------------------------------===//
-#ifndef LLVM_CLANG_DEREFCHECKER
-#define LLVM_CLANG_DEREFCHECKER
+#ifndef LLVM_CLANG_GR_DEREFCHECKER
+#define LLVM_CLANG_GR_DEREFCHECKER
#include <utility>
namespace clang {
+namespace GR {
+
class GRExprEngine;
class ExplodedNode;
std::pair<ExplodedNode * const *, ExplodedNode * const *>
GetImplicitNullDereferences(GRExprEngine &Eng);
+} // end GR namespace
+
} // end clang namespace
#endif
//
//===----------------------------------------------------------------------===//
-#ifndef LLVM_CLANG_ANALYSIS_LOCALCHECKERS_H
-#define LLVM_CLANG_ANALYSIS_LOCALCHECKERS_H
+#ifndef LLVM_CLANG_GR_LOCALCHECKERS_H
+#define LLVM_CLANG_GR_LOCALCHECKERS_H
namespace clang {
class Decl;
class Diagnostic;
class ASTContext;
-class PathDiagnosticClient;
-class GRTransferFuncs;
-class BugType;
class LangOptions;
class ParentMap;
class LiveVariables;
-class BugReporter;
class ObjCImplementationDecl;
class LangOptions;
-class GRExprEngine;
class TranslationUnitDecl;
+namespace GR {
+
+class PathDiagnosticClient;
+class GRTransferFuncs;
+class BugType;
+class BugReporter;
+class GRExprEngine;
+
void CheckDeadStores(CFG &cfg, LiveVariables &L, ParentMap &map,
BugReporter& BR);
void CheckSizeofPointer(const Decl *D, BugReporter &BR);
void RegisterCallInliner(GRExprEngine &Eng);
+
+} // end GR namespace
+
} // end namespace clang
#endif
//
//===----------------------------------------------------------------------===//
-#ifndef LLVM_CLANG_CHECKER_FRONTENDACTIONS_H
-#define LLVM_CLANG_CHECKER_FRONTENDACTIONS_H
+#ifndef LLVM_CLANG_GR_FRONTENDACTIONS_H
+#define LLVM_CLANG_GR_FRONTENDACTIONS_H
#include "clang/Frontend/FrontendAction.h"
namespace clang {
+namespace GR {
+
//===----------------------------------------------------------------------===//
// AST Consumer Actions
//===----------------------------------------------------------------------===//
llvm::StringRef InFile);
};
-} // end namespace clang
+} // end GR namespace
+
+} // end namespace clang
#endif
//
//===----------------------------------------------------------------------===//
-#ifndef LLVM_CLANG_ANALYSIS_MANAGER_REGISTRY_H
-#define LLVM_CLANG_ANALYSIS_MANAGER_REGISTRY_H
+#ifndef LLVM_CLANG_GR_MANAGER_REGISTRY_H
+#define LLVM_CLANG_GR_MANAGER_REGISTRY_H
#include "clang/GR/PathSensitive/GRState.h"
namespace clang {
+namespace GR {
+
/// ManagerRegistry - This class records manager creators registered at
/// runtime. The information is communicated to AnalysisManager through static
/// members. Better design is expected.
}
};
-}
+} // end GR namespace
+
+} // end clang namespace
+
#endif
//
//===----------------------------------------------------------------------===//
-#ifndef LLVM_CLANG_CHECKER_PATH_DIAGNOSTIC_CLIENTS_H
-#define LLVM_CLANG_CHECKER_PATH_DIAGNOSTIC_CLiENTS_H
+#ifndef LLVM_CLANG_GR_PATH_DIAGNOSTIC_CLIENTS_H
+#define LLVM_CLANG_GR_PATH_DIAGNOSTIC_CLiENTS_H
#include <string>
namespace clang {
-class PathDiagnosticClient;
class Preprocessor;
+namespace GR {
+
+class PathDiagnosticClient;
+
PathDiagnosticClient*
createHTMLDiagnosticClient(const std::string& prefix, const Preprocessor &PP);
createTextPathDiagnosticClient(const std::string& prefix,
const Preprocessor &PP);
+} // end GR namespace
+
} // end clang namespace
+
#endif
//
//===----------------------------------------------------------------------===//
-#ifndef LLVM_CLANG_ANALYSIS_ANALYSISMANAGER_H
-#define LLVM_CLANG_ANALYSIS_ANALYSISMANAGER_H
+#ifndef LLVM_CLANG_GR_ANALYSISMANAGER_H
+#define LLVM_CLANG_GR_ANALYSISMANAGER_H
#include "clang/Analysis/AnalysisContext.h"
#include "clang/GR/BugReporter/BugReporter.h"
class TranslationUnit;
}
+namespace GR {
+
class AnalysisManager : public BugReporterData {
AnalysisContextManager AnaCtxMgr;
LocationContextManager LocCtxMgr;
}
};
-}
+} // end GR namespace
+
+} // end clang namespace
#endif
//
//===----------------------------------------------------------------------===//
-#ifndef LLVM_CLANG_ANALYSIS_BASICVALUEFACTORY_H
-#define LLVM_CLANG_ANALYSIS_BASICVALUEFACTORY_H
+#ifndef LLVM_CLANG_GR_BASICVALUEFACTORY_H
+#define LLVM_CLANG_GR_BASICVALUEFACTORY_H
#include "clang/GR/PathSensitive/SVals.h"
#include "clang/AST/ASTContext.h"
namespace clang {
+namespace GR {
+
class GRState;
class CompoundValData : public llvm::FoldingSetNode {
const SVal* getPersistentSVal(SVal X);
};
+} // end GR namespace
+
} // end clang namespace
#endif
//
//===----------------------------------------------------------------------===//
-#ifndef LLVM_CLANG_ANALYSIS_CHECKER
-#define LLVM_CLANG_ANALYSIS_CHECKER
+#ifndef LLVM_CLANG_GR_CHECKER
+#define LLVM_CLANG_GR_CHECKER
#include "clang/Analysis/Support/SaveAndRestore.h"
#include "clang/GR/PathSensitive/GRExprEngine.h"
namespace clang {
+namespace GR {
+
class CheckerContext {
ExplodedNodeSet &Dst;
GRStmtNodeBuilder &B;
virtual void VisitEndAnalysis(ExplodedGraph &G, BugReporter &B,
GRExprEngine &Eng) {}
};
+
+} // end GR namespace
+
} // end clang namespace
#endif
//
//===----------------------------------------------------------------------===//
-#ifndef LLVM_CLANG_CHECKER_PATHSENSITIVE_CHECKERHELPERS
-#define LLVM_CLANG_CHECKER_PATHSENSITIVE_CHECKERHELPERS
+#ifndef LLVM_CLANG_GR_PATHSENSITIVE_CHECKERHELPERS
+#define LLVM_CLANG_GR_PATHSENSITIVE_CHECKERHELPERS
#include "clang/AST/Stmt.h"
namespace clang {
+namespace GR {
+
bool containsMacro(const Stmt *S);
bool containsEnum(const Stmt *S);
bool containsStaticLocal(const Stmt *S);
return false;
}
-}
+} // end GR namespace
+
+} // end clang namespace
#endif
//
//===----------------------------------------------------------------------===//
-#ifndef LLVM_CLANG_ANALYSIS_CHECKERVISITOR
-#define LLVM_CLANG_ANALYSIS_CHECKERVISITOR
+#ifndef LLVM_CLANG_GR_CHECKERVISITOR
+#define LLVM_CLANG_GR_CHECKERVISITOR
#include "clang/GR/PathSensitive/Checker.h"
namespace clang {
+namespace GR {
+
//===----------------------------------------------------------------------===//
// Checker visitor interface. Used by subclasses of Checker to specify their
// own checker visitor logic.
#include "clang/GR/PathSensitive/CheckerVisitor.def"
};
+} // end GR namespace
+
} // end clang namespace
#endif
//
//===----------------------------------------------------------------------===//
-#ifndef LLVM_CLANG_ANALYSIS_CONSTRAINT_MANAGER_H
-#define LLVM_CLANG_ANALYSIS_CONSTRAINT_MANAGER_H
+#ifndef LLVM_CLANG_GR_CONSTRAINT_MANAGER_H
+#define LLVM_CLANG_GR_CONSTRAINT_MANAGER_H
// FIXME: Typedef LiveSymbolsTy/DeadSymbolsTy at a more appropriate place.
#include "clang/GR/PathSensitive/Store.h"
namespace clang {
+namespace GR {
+
class GRState;
class GRStateManager;
class GRSubEngine;
ConstraintManager* CreateRangeConstraintManager(GRStateManager& statemgr,
GRSubEngine &subengine);
+} // end GR namespace
+
} // end clang namespace
#endif
//
//===----------------------------------------------------------------------===//
-#ifndef LLVM_CLANG_ANALYSIS_ENVIRONMENT_H
-#define LLVM_CLANG_ANALYSIS_ENVIRONMENT_H
+#ifndef LLVM_CLANG_GR_ENVIRONMENT_H
+#define LLVM_CLANG_GR_ENVIRONMENT_H
#include "clang/GR/PathSensitive/Store.h"
#include "clang/GR/PathSensitive/SVals.h"
namespace clang {
+class LiveVariables;
+
+namespace GR {
+
class EnvironmentManager;
class SValBuilder;
-class LiveVariables;
/// Environment - An immutable map from Stmts to their current
/// symbolic values (SVals).
llvm::SmallVectorImpl<const MemRegion*>& RegionRoots);
};
+} // end GR namespace
+
} // end clang namespace
#endif
//
//===----------------------------------------------------------------------===//
-#ifndef LLVM_CLANG_ANALYSIS_EXPLODEDGRAPH
-#define LLVM_CLANG_ANALYSIS_EXPLODEDGRAPH
+#ifndef LLVM_CLANG_GR_EXPLODEDGRAPH
+#define LLVM_CLANG_GR_EXPLODEDGRAPH
#include "clang/Analysis/ProgramPoint.h"
#include "clang/Analysis/AnalysisContext.h"
namespace clang {
-class GRState;
class CFG;
+
+namespace GR {
+
+class GRState;
class ExplodedGraph;
//===----------------------------------------------------------------------===//
inline const_iterator end() const { return Impl.end(); }
};
+} // end GR namespace
+
} // end clang namespace
// GraphTraits
namespace llvm {
- template<> struct GraphTraits<clang::ExplodedNode*> {
- typedef clang::ExplodedNode NodeType;
+ template<> struct GraphTraits<clang::GR::ExplodedNode*> {
+ typedef clang::GR::ExplodedNode NodeType;
typedef NodeType::succ_iterator ChildIteratorType;
typedef llvm::df_iterator<NodeType*> nodes_iterator;
}
};
- template<> struct GraphTraits<const clang::ExplodedNode*> {
- typedef const clang::ExplodedNode NodeType;
+ template<> struct GraphTraits<const clang::GR::ExplodedNode*> {
+ typedef const clang::GR::ExplodedNode NodeType;
typedef NodeType::const_succ_iterator ChildIteratorType;
typedef llvm::df_iterator<NodeType*> nodes_iterator;
//
//===----------------------------------------------------------------------===//
-#ifndef LLVM_CLANG_ANALYSIS_GRBLOCKCOUNTER
-#define LLVM_CLANG_ANALYSIS_GRBLOCKCOUNTER
+#ifndef LLVM_CLANG_GR_GRBLOCKCOUNTER
+#define LLVM_CLANG_GR_GRBLOCKCOUNTER
namespace llvm {
class BumpPtrAllocator;
class StackFrameContext;
+namespace GR {
+
class GRBlockCounter {
void* Data;
friend class Factory;
};
+} // end GR namespace
+
} // end clang namespace
#endif
//
//===----------------------------------------------------------------------===//
-#ifndef LLVM_CLANG_ANALYSIS_GRENGINE
-#define LLVM_CLANG_ANALYSIS_GRENGINE
+#ifndef LLVM_CLANG_GR_GRENGINE
+#define LLVM_CLANG_GR_GRENGINE
#include "clang/AST/Expr.h"
#include "clang/GR/PathSensitive/ExplodedGraph.h"
namespace clang {
+namespace GR {
+
//===----------------------------------------------------------------------===//
/// GRCoreEngine - Implements the core logic of the graph-reachability
/// analysis. It traverses the CFG and generates the ExplodedGraph.
void generateNode(const GRState *state);
};
+
+} // end GR namespace
+
} // end clang namespace
#endif
//
//===----------------------------------------------------------------------===//
-#ifndef LLVM_CLANG_ANALYSIS_GREXPRENGINE
-#define LLVM_CLANG_ANALYSIS_GREXPRENGINE
+#ifndef LLVM_CLANG_GR_GREXPRENGINE
+#define LLVM_CLANG_GR_GREXPRENGINE
#include "clang/GR/PathSensitive/AnalysisManager.h"
#include "clang/GR/PathSensitive/GRSubEngine.h"
#include "clang/AST/StmtObjC.h"
namespace clang {
+
+class ObjCForCollectionStmt;
+
+namespace GR {
+
class AnalysisManager;
class Checker;
-class ObjCForCollectionStmt;
class GRExprEngine : public GRSubEngine {
AnalysisManager &AMgr;
bool InlineCall(ExplodedNodeSet &Dst, const CallExpr *CE, ExplodedNode *Pred);
};
+} // end GR namespace
+
} // end clang namespace
#endif
//
//===----------------------------------------------------------------------===//
-#ifndef LLVM_CLANG_ANALYSIS_GREXPRENGINE_BUILDERS
-#define LLVM_CLANG_ANALYSIS_GREXPRENGINE_BUILDERS
+#ifndef LLVM_CLANG_GR_GREXPRENGINE_BUILDERS
+#define LLVM_CLANG_GR_GREXPRENGINE_BUILDERS
#include "clang/GR/PathSensitive/GRExprEngine.h"
#include "clang/Analysis/Support/SaveAndRestore.h"
namespace clang {
+namespace GR {
+
class GRStmtNodeBuilderRef {
ExplodedNodeSet &Dst;
GRStmtNodeBuilder &B;
}
};
+} // end GR namespace
+
} // end clang namespace
+
#endif
//
//===----------------------------------------------------------------------===//
-#ifndef LLVM_CLANG_ANALYSIS_VALUESTATE_H
-#define LLVM_CLANG_ANALYSIS_VALUESTATE_H
+#ifndef LLVM_CLANG_GR_VALUESTATE_H
+#define LLVM_CLANG_GR_VALUESTATE_H
#include "clang/GR/PathSensitive/ConstraintManager.h"
#include "clang/GR/PathSensitive/Environment.h"
namespace clang {
class ASTContext;
+
+namespace GR {
+
class GRStateManager;
class Checker;
scanReachableSymbols(beg, end, cb);
return cb;
}
+
+} // end GR namespace
+
} // end clang namespace
#endif
//===----------------------------------------------------------------------===//
-#ifndef LLVM_CLANG_ANALYSIS_GRSTATETRAIT_H
-#define LLVM_CLANG_ANALYSIS_GRSTATETRAIT_H
+#ifndef LLVM_CLANG_GR_GRSTATETRAIT_H
+#define LLVM_CLANG_GR_GRSTATETRAIT_H
namespace llvm {
class BumpPtrAllocator;
}
namespace clang {
+
+namespace GR {
template <typename T> struct GRStatePartialTrait;
// Partial-specialization for ImmutableMap.
delete (typename data_type::Factory*) Ctx;
}
};
+} // end GR namespace
+
} // end clang namespace
#endif
// This file defines the interface of a subengine of the GRCoreEngine.
//
//===----------------------------------------------------------------------===//
-#ifndef LLVM_CLANG_ANALYSIS_GRSUBENGINE_H
-#define LLVM_CLANG_ANALYSIS_GRSUBENGINE_H
+#ifndef LLVM_CLANG_GR_GRSUBENGINE_H
+#define LLVM_CLANG_GR_GRSUBENGINE_H
#include "clang/GR/PathSensitive/SVals.h"
namespace clang {
-class AnalysisManager;
class CFGBlock;
class CFGElement;
+class LocationContext;
+class Stmt;
+
+namespace GR {
+
+class AnalysisManager;
class ExplodedNode;
class GRState;
class GRStateManager;
class GREndPathNodeBuilder;
class GRCallEnterNodeBuilder;
class GRCallExitNodeBuilder;
-class LocationContext;
class MemRegion;
-class Stmt;
class GRSubEngine {
public:
// maximum number of analysis steps have been reached.
virtual void ProcessEndWorklist(bool hasWorkRemaining) = 0;
};
-}
+
+} // end GR namespace
+
+} // end clang namespace
#endif
//
//===----------------------------------------------------------------------===//
-#ifndef LLVM_CLANG_ANALYSIS_GRTF
-#define LLVM_CLANG_ANALYSIS_GRTF
+#ifndef LLVM_CLANG_GR_TRANSFERFUNCS
+#define LLVM_CLANG_GR_TRANSFERFUNCS
#include "clang/GR/PathSensitive/GRState.h"
#include "clang/GR/PathSensitive/SVals.h"
#include <vector>
namespace clang {
+class ObjCMessageExpr;
+
+namespace GR {
class ExplodedNode;
class ExplodedNodeSet;
class GREndPathNodeBuilder;
class GRExprEngine;
class GRStmtNodeBuilder;
class GRStmtNodeBuilderRef;
-class ObjCMessageExpr;
class GRTransferFuncs {
public:
return state;
}
};
+
+} // end GR namespace
+
} // end clang namespace
#endif
//
//===----------------------------------------------------------------------===//
-#ifndef LLVM_CLANG_ANALYSIS_GRWORKLIST
-#define LLVM_CLANG_ANALYSIS_GRWORKLIST
+#ifndef LLVM_CLANG_GR_GRWORKLIST
+#define LLVM_CLANG_GR_GRWORKLIST
#include "clang/GR/PathSensitive/GRBlockCounter.h"
#include <cstddef>
namespace clang {
class CFGBlock;
+
+namespace GR {
+
class ExplodedNode;
class ExplodedNodeImpl;
static GRWorkList *MakeBFS();
static GRWorkList *MakeBFSBlockDFSContents();
};
+
+} // end GR namespace
+
} // end clang namespace
+
#endif
//
//===----------------------------------------------------------------------===//
-#ifndef LLVM_CLANG_ANALYSIS_MEMREGION_H
-#define LLVM_CLANG_ANALYSIS_MEMREGION_H
+#ifndef LLVM_CLANG_GR_MEMREGION_H
+#define LLVM_CLANG_GR_MEMREGION_H
#include "clang/AST/Decl.h"
#include "clang/AST/DeclObjC.h"
namespace clang {
-class MemRegionManager;
-class MemSpaceRegion;
class LocationContext;
class StackFrameContext;
+
+namespace GR {
+
+class MemRegionManager;
+class MemSpaceRegion;
class SValBuilder;
class VarRegion;
class CodeTextRegion;
return getMemRegionManager()->getContext();
}
+} // end GR namespace
+
} // end clang namespace
//===----------------------------------------------------------------------===//
namespace llvm {
static inline raw_ostream& operator<<(raw_ostream& os,
- const clang::MemRegion* R) {
+ const clang::GR::MemRegion* R) {
R->dumpToStream(os);
return os;
}
//
//===----------------------------------------------------------------------===//
-#ifndef LLVM_CLANG_ANALYSIS_SVALBUILDER
-#define LLVM_CLANG_ANALYSIS_SVALBUILDER
+#ifndef LLVM_CLANG_GR_SVALBUILDER
+#define LLVM_CLANG_GR_SVALBUILDER
#include "clang/AST/Expr.h"
#include "clang/AST/ExprCXX.h"
namespace clang {
+namespace GR {
+
class GRState;
class SValBuilder {
ASTContext &context,
GRStateManager &stateMgr);
+} // end GR namespace
+
} // end clang namespace
+
#endif
//
//===----------------------------------------------------------------------===//
-#ifndef LLVM_CLANG_ANALYSIS_RVALUE_H
-#define LLVM_CLANG_ANALYSIS_RVALUE_H
+#ifndef LLVM_CLANG_GR_RVALUE_H
+#define LLVM_CLANG_GR_RVALUE_H
#include "clang/GR/PathSensitive/SymbolManager.h"
#include "llvm/Support/Casting.h"
namespace clang {
+namespace GR {
+
class CompoundValData;
class LazyCompoundValData;
class GRState;
};
class LocAsInteger : public NonLoc {
- friend class clang::SValBuilder;
+ friend class GR::SValBuilder;
explicit LocAsInteger(const std::pair<SVal, uintptr_t>& data) :
NonLoc(LocAsIntegerKind, &data) {
};
class CompoundVal : public NonLoc {
- friend class clang::SValBuilder;
+ friend class GR::SValBuilder;
explicit CompoundVal(const CompoundValData* D) : NonLoc(CompoundValKind, D) {}
};
class LazyCompoundVal : public NonLoc {
- friend class clang::SValBuilder;
+ friend class GR::SValBuilder;
explicit LazyCompoundVal(const LazyCompoundValData *D)
: NonLoc(LazyCompoundValKind, D) {}
}
};
-} // end namespace clang::nonloc
+} // end namespace GR::nonloc
//==------------------------------------------------------------------------==//
// Subclasses of Loc.
}
};
-} // end clang::loc namespace
+} // end GR::loc namespace
+} // end GR namespace
+
} // end clang namespace
namespace llvm {
static inline llvm::raw_ostream& operator<<(llvm::raw_ostream& os,
- clang::SVal V) {
+ clang::GR::SVal V) {
V.dumpToStream(os);
return os;
}
+
} // end llvm namespace
+
#endif
//
//===----------------------------------------------------------------------===//
-#ifndef LLVM_CLANG_ANALYSIS_STORE_H
-#define LLVM_CLANG_ANALYSIS_STORE_H
+#ifndef LLVM_CLANG_GR_STORE_H
+#define LLVM_CLANG_GR_STORE_H
#include "clang/GR/PathSensitive/MemRegion.h"
#include "clang/GR/PathSensitive/SValBuilder.h"
namespace clang {
+class Stmt;
+class Expr;
+class ObjCIvarDecl;
+class StackFrameContext;
+
+namespace GR {
+
/// Store - This opaque type encapsulates an immutable mapping from
/// locations to values. At a high-level, it represents the symbolic
/// memory model. Different subclasses of StoreManager may choose
class GRState;
class GRStateManager;
-class Stmt;
-class Expr;
-class ObjCIvarDecl;
class SubRegionMap;
-class StackFrameContext;
class StoreManager {
protected:
StoreManager *CreateRegionStoreManager(GRStateManager& StMgr);
StoreManager *CreateFieldsOnlyRegionStoreManager(GRStateManager& StMgr);
StoreManager *CreateFlatStoreManager(GRStateManager &StMgr);
+
+} // end GR namespace
+
} // end clang namespace
#endif
//
//===----------------------------------------------------------------------===//
-#ifndef LLVM_CLANG_CHECKER_SUMMARY
-#define LLVM_CLANG_CHECKER_SUMMARY
+#ifndef LLVM_CLANG_GR_SUMMARY
+#define LLVM_CLANG_GR_SUMMARY
#include "llvm/ADT/FoldingSet.h"
#include "llvm/Support/Allocator.h"
namespace clang {
+namespace GR {
+
namespace summMgr {
};
+} // end GR namespace
+
} // end clang namespace
#endif
//
//===----------------------------------------------------------------------===//
-#ifndef LLVM_CLANG_ANALYSIS_SYMMGR_H
-#define LLVM_CLANG_ANALYSIS_SYMMGR_H
+#ifndef LLVM_CLANG_GR_SYMMGR_H
+#define LLVM_CLANG_GR_SYMMGR_H
#include "clang/AST/Decl.h"
#include "clang/AST/Expr.h"
namespace clang {
class ASTContext;
+ class StackFrameContext;
+
+namespace GR {
class BasicValueFactory;
class MemRegion;
class SubRegion;
class TypedRegion;
class VarRegion;
- class StackFrameContext;
class SymExpr : public llvm::FoldingSetNode {
public:
virtual ~SymbolVisitor();
};
+} // end GR namespace
+
} // end clang namespace
namespace llvm {
static inline llvm::raw_ostream& operator<<(llvm::raw_ostream& os,
- const clang::SymExpr *SE) {
+ const clang::GR::SymExpr *SE) {
SE->dumpToStream(os);
return os;
}
#include "llvm/ADT/StringExtras.h"
using namespace clang;
+using namespace GR;
using llvm::StringRef;
case RewriteMacros: return new RewriteMacrosAction();
case RewriteObjC: return new RewriteObjCAction();
case RewriteTest: return new RewriteTestAction();
- case RunAnalysis: return new AnalysisAction();
+ case RunAnalysis: return new GR::AnalysisAction();
case RunPreprocessorOnly: return new PreprocessOnlyAction();
}
}
#include "clang/AST/StmtVisitor.h"
using namespace clang;
+using namespace GR;
namespace {
/// AggExprVisitor is designed after AggExprEmitter of the CodeGen module. It
#include "llvm/ADT/OwningPtr.h"
using namespace clang;
+using namespace GR;
static ExplodedNode::Auditor* CreateUbiViz();
// AnalysisConsumer creation.
//===----------------------------------------------------------------------===//
-ASTConsumer* clang::CreateAnalysisConsumer(const Preprocessor& pp,
+ASTConsumer* GR::CreateAnalysisConsumer(const Preprocessor& pp,
const std::string& OutDir,
const AnalyzerOptions& Opts) {
llvm::OwningPtr<AnalysisConsumer> C(new AnalysisConsumer(pp, OutDir, Opts));
#include "clang/Index/Indexer.h"
using namespace clang;
+using namespace GR;
AnalysisContext *
AnalysisManager::getAnalysisContextInAnotherTU(const Decl *D) {
#include "llvm/ADT/SmallPtrSet.h"
using namespace clang;
+using namespace GR;
namespace {
class AnalyzerStatsChecker : public CheckerVisitor<AnalyzerStatsChecker> {
return &x;
}
-void clang::RegisterAnalyzerStatsChecker(GRExprEngine &Eng) {
+void GR::RegisterAnalyzerStatsChecker(GRExprEngine &Eng) {
Eng.registerCheck(new AnalyzerStatsChecker());
}
#include "llvm/Support/raw_ostream.h"
using namespace clang;
+using namespace GR;
namespace { class ConstNotEq {}; }
static int ConstNotEqIndex = 0;
namespace clang {
+namespace GR {
template<>
struct GRStateTrait<ConstNotEq> : public GRStatePartialTrait<ConstNotEqTy> {
static inline void* GDMIndex() { return &ConstNotEqIndex; }
static inline void* GDMIndex() { return &ConstEqIndex; }
};
}
+}
namespace {
// BasicConstraintManager only tracks equality and inequality constraints of
} // end anonymous namespace
-ConstraintManager* clang::CreateBasicConstraintManager(GRStateManager& statemgr,
+ConstraintManager* GR::CreateBasicConstraintManager(GRStateManager& statemgr,
GRSubEngine &subengine) {
return new BasicConstraintManager(statemgr, subengine);
}
#include "llvm/ADT/ImmutableMap.h"
using namespace clang;
+using namespace GR;
typedef llvm::ImmutableMap<const MemRegion*,SVal> BindingsTy;
} // end anonymous namespace
-StoreManager* clang::CreateBasicStoreManager(GRStateManager& StMgr) {
+StoreManager* GR::CreateBasicStoreManager(GRStateManager& StMgr) {
return new BasicStoreManager(StMgr);
}
#include "clang/GR/PathSensitive/BasicValueFactory.h"
using namespace clang;
+using namespace GR;
void CompoundValData::Profile(llvm::FoldingSetNodeID& ID, QualType T,
llvm::ImmutableList<SVal> L) {
#include <queue>
using namespace clang;
+using namespace GR;
BugReporterVisitor::~BugReporterVisitor() {}
BugReporterContext::~BugReporterContext() {
#include "clang/GR/PathSensitive/GRState.h"
using namespace clang;
+using namespace GR;
//===----------------------------------------------------------------------===//
// Utility functions.
//===----------------------------------------------------------------------===//
-const Stmt *clang::bugreporter::GetDerefExpr(const ExplodedNode *N) {
+const Stmt *bugreporter::GetDerefExpr(const ExplodedNode *N) {
// Pattern match for a few useful cases (do something smarter later):
// a[0], p->f, *p
const Stmt *S = N->getLocationAs<PostStmt>()->getStmt();
return NULL;
}
-const Stmt*
-clang::bugreporter::GetDenomExpr(const ExplodedNode *N) {
+const Stmt *bugreporter::GetDenomExpr(const ExplodedNode *N) {
const Stmt *S = N->getLocationAs<PreStmt>()->getStmt();
if (const BinaryOperator *BE = dyn_cast<BinaryOperator>(S))
return BE->getRHS();
return NULL;
}
-const Stmt*
-clang::bugreporter::GetCalleeExpr(const ExplodedNode *N) {
+const Stmt *bugreporter::GetCalleeExpr(const ExplodedNode *N) {
// Callee is checked as a PreVisit to the CallExpr.
const Stmt *S = N->getLocationAs<PreStmt>()->getStmt();
if (const CallExpr *CE = dyn_cast<CallExpr>(S))
return NULL;
}
-const Stmt*
-clang::bugreporter::GetRetValExpr(const ExplodedNode *N) {
+const Stmt *bugreporter::GetRetValExpr(const ExplodedNode *N) {
const Stmt *S = N->getLocationAs<PostStmt>()->getStmt();
if (const ReturnStmt *RS = dyn_cast<ReturnStmt>(S))
return RS->getRetValue();
BRC.addVisitor(new TrackConstraintBRVisitor(Constraint, Assumption));
}
-void clang::bugreporter::registerTrackNullOrUndefValue(BugReporterContext& BRC,
- const void *data,
- const ExplodedNode* N) {
+void bugreporter::registerTrackNullOrUndefValue(BugReporterContext& BRC,
+ const void *data,
+ const ExplodedNode* N) {
const Stmt *S = static_cast<const Stmt*>(data);
}
}
-void clang::bugreporter::registerFindLastStore(BugReporterContext& BRC,
- const void *data,
- const ExplodedNode* N) {
+void bugreporter::registerFindLastStore(BugReporterContext& BRC,
+ const void *data,
+ const ExplodedNode* N) {
const MemRegion *R = static_cast<const MemRegion*>(data);
};
} // end anonymous namespace
-void clang::bugreporter::registerNilReceiverVisitor(BugReporterContext &BRC) {
+void bugreporter::registerNilReceiverVisitor(BugReporterContext &BRC) {
BRC.addVisitor(new NilReceiverVisitor());
}
// Registers every VarDecl inside a Stmt with a last store vistor.
-void clang::bugreporter::registerVarDeclsLastStore(BugReporterContext &BRC,
+void bugreporter::registerVarDeclsLastStore(BugReporterContext &BRC,
const void *stmt,
const ExplodedNode *N) {
const Stmt *S = static_cast<const Stmt *>(stmt);
#include <stdarg.h>
using namespace clang;
+using namespace GR;
using llvm::StringRef;
using llvm::StrInStrNoCase;
typedef llvm::ImmutableMap<SymbolRef, RefVal> RefBindings;
namespace clang {
+namespace GR {
template<>
struct GRStateTrait<RefBindings> : public GRStatePartialTrait<RefBindings> {
static void* GDMIndex() {
}
};
}
+}
//===----------------------------------------------------------------------===//
// Summaries
namespace { class AutoreleaseStack {}; }
namespace clang {
+namespace GR {
template<> struct GRStateTrait<AutoreleaseStack>
: public GRStatePartialTrait<ARStack> {
static inline void* GDMIndex() { return &AutoRBIndex; }
: public GRStatePartialTrait<ARPoolContents> {
static inline void* GDMIndex() { return &AutoRCIndex; }
};
+} // end GR namespace
} // end clang namespace
static SymbolRef GetCurrentAutoreleasePool(const GRState* state) {
Eng.registerCheck(new RetainReleaseChecker(this));
}
-GRTransferFuncs* clang::MakeCFRefCountTF(ASTContext& Ctx, bool GCEnabled,
+GRTransferFuncs* GR::MakeCFRefCountTF(ASTContext& Ctx, bool GCEnabled,
const LangOptions& lopts) {
return new CFRefCount(Ctx, GCEnabled, lopts);
}
#include "clang/GR/PathSensitive/Checker.h"
using namespace clang;
+using namespace GR;
Checker::~Checker() {}
#include "clang/AST/Expr.h"
// Recursively find any substatements containing macros
-bool clang::containsMacro(const Stmt *S) {
+bool clang::GR::containsMacro(const Stmt *S) {
if (S->getLocStart().isMacroID())
return true;
}
// Recursively find any substatements containing enum constants
-bool clang::containsEnum(const Stmt *S) {
+bool clang::GR::containsEnum(const Stmt *S) {
const DeclRefExpr *DR = dyn_cast<DeclRefExpr>(S);
if (DR && isa<EnumConstantDecl>(DR->getDecl()))
}
// Recursively find any substatements containing static vars
-bool clang::containsStaticLocal(const Stmt *S) {
+bool clang::GR::containsStaticLocal(const Stmt *S) {
const DeclRefExpr *DR = dyn_cast<DeclRefExpr>(S);
if (DR)
}
// Recursively find any substatements containing __builtin_offsetof
-bool clang::containsBuiltinOffsetOf(const Stmt *S) {
+bool clang::GR::containsBuiltinOffsetOf(const Stmt *S) {
if (isa<OffsetOfExpr>(S))
return true;
#include "clang/GR/PathSensitive/CheckerVisitor.h"
using namespace clang;
+using namespace GR;
namespace {
class AdjustedReturnValueChecker :
};
}
-void clang::RegisterAdjustedReturnValueChecker(GRExprEngine &Eng) {
+void GR::RegisterAdjustedReturnValueChecker(GRExprEngine &Eng) {
Eng.registerCheck(new AdjustedReturnValueChecker());
}
#include "clang/GR/PathSensitive/GRExprEngine.h"
using namespace clang;
+using namespace GR;
namespace {
class ArrayBoundChecker :
};
}
-void clang::RegisterArrayBoundChecker(GRExprEngine &Eng) {
+void GR::RegisterArrayBoundChecker(GRExprEngine &Eng) {
Eng.registerCheck(new ArrayBoundChecker());
}
#include "clang/GR/PathSensitive/CheckerVisitor.h"
using namespace clang;
+using namespace GR;
namespace {
class AttrNonNullChecker
};
} // end anonymous namespace
-void clang::RegisterAttrNonNullChecker(GRExprEngine &Eng) {
+void GR::RegisterAttrNonNullChecker(GRExprEngine &Eng) {
Eng.registerCheck(new AttrNonNullChecker());
}
#include "clang/AST/ASTContext.h"
using namespace clang;
+using namespace GR;
namespace {
class APIMisuse : public BugType {
// Check registration.
//===----------------------------------------------------------------------===//
-void clang::RegisterAppleChecks(GRExprEngine& Eng, const Decl &D) {
+void GR::RegisterAppleChecks(GRExprEngine& Eng, const Decl &D) {
Eng.registerCheck(new NilArgChecker());
Eng.registerCheck(new CFNumberCreateChecker());
RegisterNSErrorChecks(Eng.getBugReporter(), Eng, D);
//
//===----------------------------------------------------------------------===//
-#ifndef LLVM_CLANG_ANALYSIS_BASICOBJCFOUNDATIONCHECKS
-#define LLVM_CLANG_ANALYSIS_BASICOBJCFOUNDATIONCHECKS
+#ifndef LLVM_CLANG_GR_BASICOBJCFOUNDATIONCHECKS
+#define LLVM_CLANG_GR_BASICOBJCFOUNDATIONCHECKS
namespace clang {
class ASTContext;
-class BugReporter;
class Decl;
+
+namespace GR {
+
+class BugReporter;
class GRExprEngine;
void RegisterNSErrorChecks(BugReporter& BR, GRExprEngine &Eng, const Decl &D);
void RegisterNSAutoreleasePoolChecks(GRExprEngine &Eng);
+} // end GR namespace
+
} // end clang namespace
#endif
#include "clang/Basic/Builtins.h"
using namespace clang;
+using namespace GR;
namespace {
}
-void clang::RegisterBuiltinFunctionChecker(GRExprEngine &Eng) {
+void GR::RegisterBuiltinFunctionChecker(GRExprEngine &Eng) {
Eng.registerCheck(new BuiltinFunctionChecker());
}
#include "llvm/ADT/StringSwitch.h"
using namespace clang;
+using namespace GR;
namespace {
class CStringChecker : public CheckerVisitor<CStringChecker> {
} //end anonymous namespace
namespace clang {
+namespace GR {
template <>
struct GRStateTrait<CStringLength>
: public GRStatePartialTrait<CStringLength::EntryMap> {
static void *GDMIndex() { return CStringChecker::getTag(); }
};
}
+}
-void clang::RegisterCStringChecker(GRExprEngine &Eng) {
+void GR::RegisterCStringChecker(GRExprEngine &Eng) {
Eng.registerCheck(new CStringChecker());
}
#include "clang/GR/PathSensitive/CheckerVisitor.h"
using namespace clang;
+using namespace GR;
namespace {
class CallAndMessageChecker
};
} // end anonymous namespace
-void clang::RegisterCallAndMessageChecker(GRExprEngine &Eng) {
+void GR::RegisterCallAndMessageChecker(GRExprEngine &Eng) {
Eng.registerCheck(new CallAndMessageChecker());
}
#include "GRExprEngineInternalChecks.h"
using namespace clang;
+using namespace GR;
namespace {
class CastSizeChecker : public CheckerVisitor<CastSizeChecker> {
}
-void clang::RegisterCastSizeChecker(GRExprEngine &Eng) {
+void GR::RegisterCastSizeChecker(GRExprEngine &Eng) {
Eng.registerCheck(new CastSizeChecker());
}
#include "GRExprEngineInternalChecks.h"
using namespace clang;
+using namespace GR;
namespace {
class CastToStructChecker
}
}
-void clang::RegisterCastToStructChecker(GRExprEngine &Eng) {
+void GR::RegisterCastToStructChecker(GRExprEngine &Eng) {
Eng.registerCheck(new CastToStructChecker());
}
#include "llvm/ADT/SmallPtrSet.h"
using namespace clang;
+using namespace GR;
namespace {
} // end anonymous namespace
-void clang::CheckDeadStores(CFG &cfg, LiveVariables &L, ParentMap &pmap,
+void GR::CheckDeadStores(CFG &cfg, LiveVariables &L, ParentMap &pmap,
BugReporter& BR) {
FindEscaped FS(&cfg);
FS.getCFG().VisitBlockStmts(FS);
#include "llvm/Support/raw_ostream.h"
using namespace clang;
+using namespace GR;
static bool scan_dealloc(Stmt* S, Selector Dealloc) {
return false;
}
-void clang::CheckObjCDealloc(const ObjCImplementationDecl* D,
- const LangOptions& LOpts, BugReporter& BR) {
+void GR::CheckObjCDealloc(const ObjCImplementationDecl* D,
+ const LangOptions& LOpts, BugReporter& BR) {
assert (LOpts.getGCMode() != LangOptions::GCOnly);
#include "llvm/Support/raw_ostream.h"
using namespace clang;
+using namespace GR;
static bool AreTypesCompatible(QualType Derived, QualType Ancestor,
ASTContext& C) {
}
}
-void clang::CheckObjCInstMethSignature(const ObjCImplementationDecl* ID,
- BugReporter& BR) {
+void GR::CheckObjCInstMethSignature(const ObjCImplementationDecl* ID,
+ BugReporter& BR) {
const ObjCInterfaceDecl* D = ID->getClassInterface();
const ObjCInterfaceDecl* C = D->getSuperClass();
#include "llvm/Support/raw_ostream.h"
using namespace clang;
+using namespace GR;
static bool isArc4RandomAvailable(const ASTContext &Ctx) {
const llvm::Triple &T = Ctx.Target.getTriple();
// Entry point for check.
//===----------------------------------------------------------------------===//
-void clang::CheckSecuritySyntaxOnly(const Decl *D, BugReporter &BR) {
+void GR::CheckSecuritySyntaxOnly(const Decl *D, BugReporter &BR) {
WalkAST walker(BR);
walker.Visit(D->getBody());
}
#include "clang/GR/Checkers/LocalCheckers.h"
using namespace clang;
+using namespace GR;
namespace {
class WalkAST : public StmtVisitor<WalkAST> {
}
}
-void clang::CheckSizeofPointer(const Decl *D, BugReporter &BR) {
+void GR::CheckSizeofPointer(const Decl *D, BugReporter &BR) {
WalkAST walker(BR);
walker.Visit(D->getBody());
}
#include "clang/GR/PathSensitive/SymbolManager.h"
#include "llvm/ADT/ImmutableMap.h"
using namespace clang;
+using namespace GR;
namespace {
} // end anonymous namespace
-void clang::RegisterChrootChecker(GRExprEngine &Eng) {
+void GR::RegisterChrootChecker(GRExprEngine &Eng) {
Eng.registerCheck(new ChrootChecker());
}
#include "clang/GR/PathSensitive/GRExprEngine.h"
using namespace clang;
+using namespace GR;
namespace {
class DereferenceChecker : public Checker {
};
} // end anonymous namespace
-void clang::RegisterDereferenceChecker(GRExprEngine &Eng) {
+void GR::RegisterDereferenceChecker(GRExprEngine &Eng) {
Eng.registerCheck(new DereferenceChecker());
}
std::pair<ExplodedNode * const *, ExplodedNode * const *>
-clang::GetImplicitNullDereferences(GRExprEngine &Eng) {
+GR::GetImplicitNullDereferences(GRExprEngine &Eng) {
DereferenceChecker *checker = Eng.getChecker<DereferenceChecker>();
if (!checker)
return std::make_pair((ExplodedNode * const *) 0,
#include "clang/GR/PathSensitive/CheckerVisitor.h"
using namespace clang;
+using namespace GR;
namespace {
class DivZeroChecker : public CheckerVisitor<DivZeroChecker> {
};
} // end anonymous namespace
-void clang::RegisterDivZeroChecker(GRExprEngine &Eng) {
+void GR::RegisterDivZeroChecker(GRExprEngine &Eng) {
Eng.registerCheck(new DivZeroChecker());
}
#include "clang/GR/PathSensitive/CheckerVisitor.h"
using namespace clang;
+using namespace GR;
namespace {
class FixedAddressChecker
}
}
-void clang::RegisterFixedAddressChecker(GRExprEngine &Eng) {
+void GR::RegisterFixedAddressChecker(GRExprEngine &Eng) {
Eng.registerCheck(new FixedAddressChecker());
}
#include "clang/GR/Checkers/LocalCheckers.h"
using namespace clang;
+using namespace GR;
-void clang::RegisterExperimentalChecks(GRExprEngine &Eng) {
+void GR::RegisterExperimentalChecks(GRExprEngine &Eng) {
// These are checks that never belong as internal checks
// within GRExprEngine.
RegisterCStringChecker(Eng);
RegisterUnreachableCodeChecker(Eng);
}
-void clang::RegisterExperimentalInternalChecks(GRExprEngine &Eng) {
+void GR::RegisterExperimentalInternalChecks(GRExprEngine &Eng) {
// These are internal checks that should eventually migrate to
// RegisterInternalChecks() once they have been further tested.
//
//===----------------------------------------------------------------------===//
-#ifndef LLVM_CLANG_GREXPRENGINE_EXPERIMENTAL_CHECKS
-#define LLVM_CLANG_GREXPRENGINE_EXPERIMENTAL_CHECKS
+#ifndef LLVM_CLANG_GR_GREXPRENGINE_EXPERIMENTAL_CHECKS
+#define LLVM_CLANG_GR_GREXPRENGINE_EXPERIMENTAL_CHECKS
namespace clang {
+namespace GR {
+
class GRExprEngine;
void RegisterAnalyzerStatsChecker(GRExprEngine &Eng);
void RegisterStreamChecker(GRExprEngine &Eng);
void RegisterUnreachableCodeChecker(GRExprEngine &Eng);
+} // end GR namespace
+
} // end clang namespace
+
#endif
//
//===----------------------------------------------------------------------===//
-#ifndef LLVM_CLANG_GREXPRENGINE_INTERNAL_CHECKS
-#define LLVM_CLANG_GREXPRENGINE_INTERNAL_CHECKS
+#ifndef LLVM_CLANG_GR_GREXPRENGINE_INTERNAL_CHECKS
+#define LLVM_CLANG_GR_GREXPRENGINE_INTERNAL_CHECKS
namespace clang {
+namespace GR {
+
class GRExprEngine;
// Foundational checks that handle basic semantics.
void RegisterOSAtomicChecker(GRExprEngine &Eng);
void RegisterUnixAPIChecker(GRExprEngine &Eng);
+} // end GR namespace
+
} // end clang namespace
+
#endif
#include <deque>
using namespace clang;
+using namespace GR;
namespace {
class IdempotentOperationChecker
return &x;
}
-void clang::RegisterIdempotentOperationChecker(GRExprEngine &Eng) {
+void GR::RegisterIdempotentOperationChecker(GRExprEngine &Eng) {
Eng.registerCheck(new IdempotentOperationChecker());
}
#include "llvm/ADT/StringRef.h"
using namespace clang;
+using namespace GR;
//===----------------------------------------------------------------------===//
// Generic type checking routines.
}
}
-void clang::CheckLLVMConventions(TranslationUnitDecl &TU,
+void GR::CheckLLVMConventions(TranslationUnitDecl &TU,
BugReporter &BR) {
ScanCodeDecls(&TU, BR);
}
#include "llvm/Support/raw_ostream.h"
using namespace clang;
+using namespace GR;
namespace {
class MacOSXAPIChecker : public CheckerVisitor<MacOSXAPIChecker> {
};
} //end anonymous namespace
-void clang::RegisterMacOSXAPIChecker(GRExprEngine &Eng) {
+void GR::RegisterMacOSXAPIChecker(GRExprEngine &Eng) {
if (Eng.getContext().Target.getTriple().getVendor() == llvm::Triple::Apple)
Eng.registerCheck(new MacOSXAPIChecker());
}
#include "clang/GR/PathSensitive/SymbolManager.h"
#include "llvm/ADT/ImmutableMap.h"
using namespace clang;
+using namespace GR;
namespace {
typedef llvm::ImmutableMap<SymbolRef, RefState> RegionStateTy;
namespace clang {
+namespace GR {
template <>
struct GRStateTrait<RegionState>
: public GRStatePartialTrait<RegionStateTy> {
static void *GDMIndex() { return MallocChecker::getTag(); }
};
}
+}
-void clang::RegisterMallocChecker(GRExprEngine &Eng) {
+void GR::RegisterMallocChecker(GRExprEngine &Eng) {
Eng.registerCheck(new MallocChecker());
}
#include "clang/AST/Decl.h"
using namespace clang;
+using namespace GR;
namespace {
class NSAutoreleasePoolChecker
} // end anonymous namespace
-void clang::RegisterNSAutoreleasePoolChecks(GRExprEngine &Eng) {
+void GR::RegisterNSAutoreleasePoolChecks(GRExprEngine &Eng) {
ASTContext &Ctx = Eng.getContext();
if (Ctx.getLangOptions().getGCMode() != LangOptions::NonGC) {
Eng.registerCheck(new NSAutoreleasePoolChecker(GetNullarySelector("release",
#include "llvm/ADT/SmallVector.h"
using namespace clang;
+using namespace GR;
namespace {
class NSErrorChecker : public BugType {
} // end anonymous namespace
-void clang::RegisterNSErrorChecks(BugReporter& BR, GRExprEngine &Eng,
+void GR::RegisterNSErrorChecks(BugReporter& BR, GRExprEngine &Eng,
const Decl &D) {
BR.Register(new NSErrorChecker(D, true, Eng));
BR.Register(new NSErrorChecker(D, false, Eng));
#include "llvm/ADT/StringSwitch.h"
using namespace clang;
+using namespace GR;
namespace {
}
-void clang::RegisterNoReturnFunctionChecker(GRExprEngine &Eng) {
+void GR::RegisterNoReturnFunctionChecker(GRExprEngine &Eng) {
Eng.registerCheck(new NoReturnFunctionChecker());
}
#include "clang/Basic/Builtins.h"
using namespace clang;
+using namespace GR;
namespace {
}
-void clang::RegisterOSAtomicChecker(GRExprEngine &Eng) {
+void GR::RegisterOSAtomicChecker(GRExprEngine &Eng) {
Eng.registerCheck(new OSAtomicChecker());
}
#include "clang/GR/PathSensitive/GRExprEngine.h"
using namespace clang;
+using namespace GR;
namespace {
class ObjCAtSyncChecker : public CheckerVisitor<ObjCAtSyncChecker> {
};
} // end anonymous namespace
-void clang::RegisterObjCAtSyncChecker(GRExprEngine &Eng) {
+void GR::RegisterObjCAtSyncChecker(GRExprEngine &Eng) {
// @synchronized is an Objective-C 2 feature.
if (Eng.getContext().getLangOptions().ObjC2)
Eng.registerCheck(new ObjCAtSyncChecker());
#include "clang/Basic/SourceManager.h"
using namespace clang;
+using namespace GR;
enum IVarState { Unused, Used };
typedef llvm::DenseMap<const ObjCIvarDecl*,IVarState> IvarUsageMap;
}
}
-void clang::CheckObjCUnusedIvar(const ObjCImplementationDecl *D,
+void GR::CheckObjCUnusedIvar(const ObjCImplementationDecl *D,
BugReporter &BR) {
const ObjCInterfaceDecl* ID = D->getClassInterface();
#include "clang/GR/PathSensitive/CheckerVisitor.h"
using namespace clang;
+using namespace GR;
namespace {
class PointerArithChecker
}
}
-void clang::RegisterPointerArithChecker(GRExprEngine &Eng) {
+void GR::RegisterPointerArithChecker(GRExprEngine &Eng) {
Eng.registerCheck(new PointerArithChecker());
}
#include "clang/GR/PathSensitive/CheckerVisitor.h"
using namespace clang;
+using namespace GR;
namespace {
class PointerSubChecker
}
}
-void clang::RegisterPointerSubChecker(GRExprEngine &Eng) {
+void GR::RegisterPointerSubChecker(GRExprEngine &Eng) {
Eng.registerCheck(new PointerSubChecker());
}
#include "llvm/ADT/ImmutableSet.h"
using namespace clang;
+using namespace GR;
namespace {
class PthreadLockChecker
// GDM Entry for tracking lock state.
namespace { class LockSet {}; }
namespace clang {
+namespace GR {
template <> struct GRStateTrait<LockSet> :
public GRStatePartialTrait<llvm::ImmutableSet<const MemRegion*> > {
static void* GDMIndex() { return PthreadLockChecker::getTag(); }
};
+} // end GR namespace
} // end clang namespace
-void clang::RegisterPthreadLockChecker(GRExprEngine &Eng) {
+void GR::RegisterPthreadLockChecker(GRExprEngine &Eng) {
Eng.registerCheck(new PthreadLockChecker());
}
#include "clang/GR/PathSensitive/GRExprEngine.h"
using namespace clang;
+using namespace GR;
namespace {
class ReturnPointerRangeChecker :
};
}
-void clang::RegisterReturnPointerRangeChecker(GRExprEngine &Eng) {
+void GR::RegisterReturnPointerRangeChecker(GRExprEngine &Eng) {
Eng.registerCheck(new ReturnPointerRangeChecker());
}
#include "clang/GR/PathSensitive/GRExprEngine.h"
using namespace clang;
+using namespace GR;
namespace {
class ReturnUndefChecker :
};
}
-void clang::RegisterReturnUndefChecker(GRExprEngine &Eng) {
+void GR::RegisterReturnUndefChecker(GRExprEngine &Eng) {
Eng.registerCheck(new ReturnUndefChecker());
}
#include "clang/Basic/SourceManager.h"
#include "llvm/ADT/SmallString.h"
using namespace clang;
+using namespace GR;
namespace {
class StackAddrLeakChecker : public CheckerVisitor<StackAddrLeakChecker> {
};
}
-void clang::RegisterStackAddrLeakChecker(GRExprEngine &Eng) {
+void GR::RegisterStackAddrLeakChecker(GRExprEngine &Eng) {
Eng.registerCheck(new StackAddrLeakChecker());
}
#include "llvm/ADT/ImmutableMap.h"
using namespace clang;
+using namespace GR;
namespace {
} // end anonymous namespace
namespace clang {
+namespace GR {
template <>
struct GRStateTrait<StreamState>
: public GRStatePartialTrait<llvm::ImmutableMap<SymbolRef, StreamState> > {
static void *GDMIndex() { return StreamChecker::getTag(); }
};
}
+}
-void clang::RegisterStreamChecker(GRExprEngine &Eng) {
+void GR::RegisterStreamChecker(GRExprEngine &Eng) {
Eng.registerCheck(new StreamChecker());
}
#include "clang/GR/PathSensitive/Checker.h"
using namespace clang;
+using namespace GR;
namespace {
}
-void clang::RegisterUndefBranchChecker(GRExprEngine &Eng) {
+void GR::RegisterUndefBranchChecker(GRExprEngine &Eng) {
Eng.registerCheck(new UndefBranchChecker());
}
#include "llvm/Support/raw_ostream.h"
using namespace clang;
+using namespace GR;
namespace {
class UndefCapturedBlockVarChecker
};
} // end anonymous namespace
-void clang::RegisterUndefCapturedBlockVarChecker(GRExprEngine &Eng) {
+void GR::RegisterUndefCapturedBlockVarChecker(GRExprEngine &Eng) {
Eng.registerCheck(new UndefCapturedBlockVarChecker());
}
#include "clang/GR/PathSensitive/GRExprEngine.h"
using namespace clang;
+using namespace GR;
namespace {
class UndefResultChecker
};
} // end anonymous namespace
-void clang::RegisterUndefResultChecker(GRExprEngine &Eng) {
+void GR::RegisterUndefResultChecker(GRExprEngine &Eng) {
Eng.registerCheck(new UndefResultChecker());
}
#include "clang/GR/PathSensitive/CheckerVisitor.h"
using namespace clang;
+using namespace GR;
namespace {
class UndefinedArraySubscriptChecker
};
} // end anonymous namespace
-void clang::RegisterUndefinedArraySubscriptChecker(GRExprEngine &Eng) {
+void GR::RegisterUndefinedArraySubscriptChecker(GRExprEngine &Eng) {
Eng.registerCheck(new UndefinedArraySubscriptChecker());
}
#include "clang/GR/PathSensitive/CheckerVisitor.h"
using namespace clang;
+using namespace GR;
namespace {
class UndefinedAssignmentChecker
};
}
-void clang::RegisterUndefinedAssignmentChecker(GRExprEngine &Eng){
+void GR::RegisterUndefinedAssignmentChecker(GRExprEngine &Eng){
Eng.registerCheck(new UndefinedAssignmentChecker());
}
#include <fcntl.h>
using namespace clang;
+using namespace GR;
using llvm::Optional;
namespace {
};
} //end anonymous namespace
-void clang::RegisterUnixAPIChecker(GRExprEngine &Eng) {
+void GR::RegisterUnixAPIChecker(GRExprEngine &Eng) {
Eng.registerCheck(new UnixAPIChecker());
}
#define DEFAULT_CFGBLOCKS 256
using namespace clang;
+using namespace GR;
namespace {
class UnreachableCodeChecker : public Checker {
return &x;
}
-void clang::RegisterUnreachableCodeChecker(GRExprEngine &Eng) {
+void GR::RegisterUnreachableCodeChecker(GRExprEngine &Eng) {
Eng.registerCheck(new UnreachableCodeChecker());
}
#include "clang/GR/PathSensitive/GRExprEngine.h"
using namespace clang;
+using namespace GR;
namespace {
class VLASizeChecker : public CheckerVisitor<VLASizeChecker> {
};
} // end anonymous namespace
-void clang::RegisterVLASizeChecker(GRExprEngine &Eng) {
+void GR::RegisterVLASizeChecker(GRExprEngine &Eng) {
Eng.registerCheck(new VLASizeChecker());
}
#include "clang/GR/PathSensitive/GRState.h"
using namespace clang;
+using namespace GR;
SVal Environment::lookupExpr(const Stmt* E) const {
const SVal* X = ExprBindings.lookup(E);
#include <vector>
using namespace clang;
+using namespace GR;
//===----------------------------------------------------------------------===//
// Node auditing.
#include "llvm/Support/ErrorHandling.h"
using namespace clang;
+using namespace GR;
using llvm::Interval;
// The actual store type.
};
} // end anonymous namespace
-StoreManager *clang::CreateFlatStoreManager(GRStateManager &StMgr) {
+StoreManager *GR::CreateFlatStoreManager(GRStateManager &StMgr) {
return new FlatStoreManager(StMgr);
}
#include "clang/Frontend/CompilerInstance.h"
#include "clang/GR/AnalysisConsumer.h"
using namespace clang;
+using namespace GR;
ASTConsumer *AnalysisAction::CreateASTConsumer(CompilerInstance &CI,
llvm::StringRef InFile) {
#include "llvm/ADT/ImmutableMap.h"
using namespace clang;
+using namespace GR;
namespace {
#include "clang/AST/DeclCXX.h"
using namespace clang;
+using namespace GR;
namespace {
class CallExprWLItem {
using llvm::cast;
using llvm::isa;
using namespace clang;
+using namespace GR;
// This should be removed in the future.
namespace clang {
+namespace GR {
GRTransferFuncs* MakeCFRefCountTF(ASTContext& Ctx, bool GCEnabled,
const LangOptions& lopts);
}
+}
//===----------------------------------------------------------------------===//
// Worklist classes for exploration of reachable states.
#endif
using namespace clang;
+using namespace GR;
using llvm::dyn_cast;
using llvm::dyn_cast_or_null;
using llvm::cast;
#include "llvm/Support/raw_ostream.h"
using namespace clang;
+using namespace GR;
// Give the vtable for ConstraintManager somewhere to live.
// FIXME: Move this elsewhere.
#include "llvm/Support/Path.h"
using namespace clang;
+using namespace GR;
//===----------------------------------------------------------------------===//
// Boilerplate.
}
PathDiagnosticClient*
-clang::createHTMLDiagnosticClient(const std::string& prefix,
+GR::createHTMLDiagnosticClient(const std::string& prefix,
const Preprocessor &PP) {
return new HTMLDiagnostics(prefix, PP);
}
#include "clang/GR/ManagerRegistry.h"
using namespace clang;
+using namespace GR;
StoreManagerCreator ManagerRegistry::StoreMgrCreator = 0;
#include "llvm/Support/raw_ostream.h"
using namespace clang;
+using namespace GR;
//===----------------------------------------------------------------------===//
// MemRegion Construction.
#include "llvm/Support/Casting.h"
using namespace clang;
+using namespace GR;
using llvm::dyn_cast;
using llvm::isa;
#include "llvm/ADT/DenseMap.h"
#include "llvm/ADT/SmallVector.h"
using namespace clang;
+using namespace GR;
using llvm::cast;
typedef llvm::DenseMap<FileID, unsigned> FIDMap;
: OutputFile(output), LangOpts(LO), SubPD(subPD), flushed(false) {}
PathDiagnosticClient*
-clang::createPlistDiagnosticClient(const std::string& s, const Preprocessor &PP,
+GR::createPlistDiagnosticClient(const std::string& s, const Preprocessor &PP,
PathDiagnosticClient *subPD) {
return new PlistDiagnostics(s, PP.getLangOptions(), subPD);
}
#include "llvm/Support/raw_ostream.h"
using namespace clang;
+using namespace GR;
namespace { class ConstraintRange {}; }
static int ConstraintRangeIndex = 0;
typedef llvm::ImmutableMap<SymbolRef,RangeSet> ConstraintRangeTy;
namespace clang {
+namespace GR {
template<>
struct GRStateTrait<ConstraintRange>
: public GRStatePartialTrait<ConstraintRangeTy> {
static inline void* GDMIndex() { return &ConstraintRangeIndex; }
};
}
+}
namespace {
class RangeConstraintManager : public SimpleConstraintManager{
} // end anonymous namespace
-ConstraintManager* clang::CreateRangeConstraintManager(GRStateManager&,
- GRSubEngine &subeng) {
+ConstraintManager* GR::CreateRangeConstraintManager(GRStateManager&,
+ GRSubEngine &subeng) {
return new RangeConstraintManager(subeng);
}
#include "llvm/Support/raw_ostream.h"
using namespace clang;
+using namespace GR;
using llvm::Optional;
//===----------------------------------------------------------------------===//
// RegionStore creation.
//===----------------------------------------------------------------------===//
-StoreManager *clang::CreateRegionStoreManager(GRStateManager& StMgr) {
+StoreManager *GR::CreateRegionStoreManager(GRStateManager& StMgr) {
RegionStoreFeatures F = maximal_features_tag();
return new RegionStoreManager(StMgr, F);
}
-StoreManager *clang::CreateFieldsOnlyRegionStoreManager(GRStateManager &StMgr) {
+StoreManager *GR::CreateFieldsOnlyRegionStoreManager(GRStateManager &StMgr) {
RegionStoreFeatures F = minimal_features_tag();
F.enableFields(true);
return new RegionStoreManager(StMgr, F);
#include "clang/GR/PathSensitive/BasicValueFactory.h"
using namespace clang;
+using namespace GR;
//===----------------------------------------------------------------------===//
// Basic SVal creation.
#include "clang/Basic/IdentifierTable.h"
using namespace clang;
+using namespace GR;
using llvm::dyn_cast;
using llvm::cast;
using llvm::APSInt;
namespace clang {
+namespace GR {
+
SimpleConstraintManager::~SimpleConstraintManager() {}
bool SimpleConstraintManager::canReasonAbout(SVal X) const {
} // end switch
}
-} // end of namespace clang
+} // end of namespace GR
+
+} // end of namespace clang
//
//===----------------------------------------------------------------------===//
-#ifndef LLVM_CLANG_ANALYSIS_SIMPLE_CONSTRAINT_MANAGER_H
-#define LLVM_CLANG_ANALYSIS_SIMPLE_CONSTRAINT_MANAGER_H
+#ifndef LLVM_CLANG_GR_SIMPLE_CONSTRAINT_MANAGER_H
+#define LLVM_CLANG_GR_SIMPLE_CONSTRAINT_MANAGER_H
#include "clang/GR/PathSensitive/ConstraintManager.h"
#include "clang/GR/PathSensitive/GRState.h"
namespace clang {
+namespace GR {
+
class SimpleConstraintManager : public ConstraintManager {
GRSubEngine &SU;
public:
const GRState *assumeAux(const GRState *state, NonLoc Cond, bool Assumption);
};
-} // end clang namespace
+} // end GR namespace
+
+} // end clang namespace
#endif
#include "clang/GR/PathSensitive/GRState.h"
using namespace clang;
+using namespace GR;
namespace {
class SimpleSValBuilder : public SValBuilder {
};
} // end anonymous namespace
-SValBuilder *clang::createSimpleSValBuilder(llvm::BumpPtrAllocator &alloc,
+SValBuilder *GR::createSimpleSValBuilder(llvm::BumpPtrAllocator &alloc,
ASTContext &context,
GRStateManager &stateMgr) {
return new SimpleSValBuilder(alloc, context, stateMgr);
#include "clang/AST/CharUnits.h"
using namespace clang;
+using namespace GR;
StoreManager::StoreManager(GRStateManager &stateMgr)
: svalBuilder(stateMgr.getSValBuilder()), StateMgr(stateMgr),
#include "llvm/Support/raw_ostream.h"
using namespace clang;
+using namespace GR;
void SymExpr::dump() const {
dumpToStream(llvm::errs());
#include "clang/Lex/Preprocessor.h"
#include "llvm/Support/raw_ostream.h"
using namespace clang;
+using namespace GR;
using namespace llvm;
namespace {
} // end anonymous namespace
PathDiagnosticClient*
-clang::createTextPathDiagnosticClient(const std::string& out,
+GR::createTextPathDiagnosticClient(const std::string& out,
const Preprocessor &PP) {
return new TextPathDiagnostics(out, PP.getDiagnostics());
}