003 File Manager
Current Path:
/usr/src/contrib/llvm-project/clang/lib/StaticAnalyzer/Checkers
usr
/
src
/
contrib
/
llvm-project
/
clang
/
lib
/
StaticAnalyzer
/
Checkers
/
📁
..
📄
AllocationState.h
(1.41 KB)
📄
AnalysisOrderChecker.cpp
(8.62 KB)
📄
AnalyzerStatsChecker.cpp
(5.04 KB)
📄
ArrayBoundChecker.cpp
(3.22 KB)
📄
ArrayBoundCheckerV2.cpp
(13.07 KB)
📄
BasicObjCFoundationChecks.cpp
(43.82 KB)
📄
BlockInCriticalSectionChecker.cpp
(6.69 KB)
📄
BoolAssignmentChecker.cpp
(3.45 KB)
📄
BuiltinFunctionChecker.cpp
(5 KB)
📄
CStringChecker.cpp
(93.24 KB)
📄
CStringSyntaxChecker.cpp
(9.8 KB)
📄
CXXSelfAssignmentChecker.cpp
(3.08 KB)
📄
CallAndMessageChecker.cpp
(26.57 KB)
📄
CastSizeChecker.cpp
(4.96 KB)
📄
CastToStructChecker.cpp
(4.43 KB)
📄
CastValueChecker.cpp
(19.65 KB)
📄
CheckObjCDealloc.cpp
(37.83 KB)
📄
CheckObjCInstMethSignature.cpp
(4.8 KB)
📄
CheckPlacementNew.cpp
(11.91 KB)
📄
CheckSecuritySyntaxOnly.cpp
(38.79 KB)
📄
CheckSizeofPointer.cpp
(3.16 KB)
📄
CheckerDocumentation.cpp
(14.64 KB)
📄
ChrootChecker.cpp
(4.88 KB)
📄
CloneChecker.cpp
(8.28 KB)
📄
ContainerModeling.cpp
(39.85 KB)
📄
ConversionChecker.cpp
(7.11 KB)
📄
DeadStoresChecker.cpp
(17.82 KB)
📄
DebugCheckers.cpp
(10.41 KB)
📄
DebugContainerModeling.cpp
(4.94 KB)
📄
DebugIteratorModeling.cpp
(5.15 KB)
📄
DeleteWithNonVirtualDtorChecker.cpp
(5.35 KB)
📄
DereferenceChecker.cpp
(10.54 KB)
📄
DirectIvarAssignment.cpp
(8.02 KB)
📄
DivZeroChecker.cpp
(3.42 KB)
📄
DynamicTypeChecker.cpp
(7.31 KB)
📄
DynamicTypePropagation.cpp
(42.11 KB)
📄
EnumCastOutOfRangeChecker.cpp
(5.75 KB)
📄
ExprInspectionChecker.cpp
(15.6 KB)
📄
FixedAddressChecker.cpp
(2.33 KB)
📄
FuchsiaHandleChecker.cpp
(23.1 KB)
📄
GCDAntipatternChecker.cpp
(7.85 KB)
📄
GTestChecker.cpp
(10.52 KB)
📄
GenericTaintChecker.cpp
(34.31 KB)
📄
IdenticalExprChecker.cpp
(18.88 KB)
📄
InnerPointerChecker.cpp
(11.54 KB)
📄
InterCheckerAPI.h
(1.09 KB)
📄
InvalidatedIteratorChecker.cpp
(4.93 KB)
📄
Iterator.cpp
(10.62 KB)
📄
Iterator.h
(6.32 KB)
📄
IteratorModeling.cpp
(31.33 KB)
📄
IteratorRangeChecker.cpp
(12.64 KB)
📄
IvarInvalidationChecker.cpp
(27.63 KB)
📄
LLVMConventionsChecker.cpp
(9.9 KB)
📄
LocalizationChecker.cpp
(52.38 KB)
📄
MIGChecker.cpp
(11.3 KB)
📁
MPI-Checker
📄
MacOSKeychainAPIChecker.cpp
(25.21 KB)
📄
MacOSXAPIChecker.cpp
(6.61 KB)
📄
MallocChecker.cpp
(127.38 KB)
📄
MallocOverflowSecurityChecker.cpp
(11.91 KB)
📄
MallocSizeofChecker.cpp
(8.03 KB)
📄
MismatchedIteratorChecker.cpp
(11.01 KB)
📄
MmapWriteExecChecker.cpp
(3.22 KB)
📄
Move.h
(1.07 KB)
📄
MoveChecker.cpp
(27 KB)
📄
NSAutoreleasePoolChecker.cpp
(2.93 KB)
📄
NSErrorChecker.cpp
(10.6 KB)
📄
NoReturnFunctionChecker.cpp
(5.48 KB)
📄
NonNullParamChecker.cpp
(11.22 KB)
📄
NonnullGlobalConstantsChecker.cpp
(5.09 KB)
📄
NullabilityChecker.cpp
(46.95 KB)
📄
NumberObjectConversionChecker.cpp
(13.69 KB)
📄
OSObjectCStyleCast.cpp
(3.14 KB)
📄
ObjCAtSyncChecker.cpp
(3.34 KB)
📄
ObjCAutoreleaseWriteChecker.cpp
(8.62 KB)
📄
ObjCContainersASTChecker.cpp
(5.5 KB)
📄
ObjCContainersChecker.cpp
(6.71 KB)
📄
ObjCMissingSuperCallChecker.cpp
(9.23 KB)
📄
ObjCPropertyChecker.cpp
(3.03 KB)
📄
ObjCSelfInitChecker.cpp
(16.21 KB)
📄
ObjCSuperDeallocChecker.cpp
(9.33 KB)
📄
ObjCUnusedIVarsChecker.cpp
(6.01 KB)
📄
PaddingChecker.cpp
(14.26 KB)
📄
PointerArithChecker.cpp
(12.18 KB)
📄
PointerIterationChecker.cpp
(3.79 KB)
📄
PointerSortingChecker.cpp
(4.5 KB)
📄
PointerSubChecker.cpp
(2.56 KB)
📄
PthreadLockChecker.cpp
(28.42 KB)
📁
RetainCountChecker
📄
ReturnPointerRangeChecker.cpp
(3.39 KB)
📄
ReturnUndefChecker.cpp
(4.1 KB)
📄
ReturnValueChecker.cpp
(5.79 KB)
📄
RunLoopAutoreleaseLeakChecker.cpp
(7.2 KB)
📄
STLAlgorithmModeling.cpp
(7 KB)
📄
SimpleStreamChecker.cpp
(9.43 KB)
📄
SmartPtr.h
(1.17 KB)
📄
SmartPtrChecker.cpp
(2.68 KB)
📄
SmartPtrModeling.cpp
(8.05 KB)
📄
StackAddrEscapeChecker.cpp
(15 KB)
📄
StdLibraryFunctionsChecker.cpp
(74.86 KB)
📄
StreamChecker.cpp
(37.36 KB)
📄
Taint.cpp
(9.04 KB)
📄
Taint.h
(4.19 KB)
📄
TaintTesterChecker.cpp
(2.17 KB)
📄
TestAfterDivZeroChecker.cpp
(8.19 KB)
📄
TraversalChecker.cpp
(4.38 KB)
📄
TrustNonnullChecker.cpp
(9.12 KB)
📄
UndefBranchChecker.cpp
(3.82 KB)
📄
UndefCapturedBlockVarChecker.cpp
(3.64 KB)
📄
UndefResultChecker.cpp
(7.19 KB)
📄
UndefinedArraySubscriptChecker.cpp
(2.36 KB)
📄
UndefinedAssignmentChecker.cpp
(3.74 KB)
📁
UninitializedObject
📄
UnixAPIChecker.cpp
(18.05 KB)
📄
UnreachableCodeChecker.cpp
(9.59 KB)
📄
VLASizeChecker.cpp
(10.95 KB)
📄
ValistChecker.cpp
(15.65 KB)
📄
VforkChecker.cpp
(7.67 KB)
📄
VirtualCallChecker.cpp
(8.11 KB)
📁
WebKit
📄
Yaml.h
(2.06 KB)
📁
cert
Editing: DebugCheckers.cpp
//==- DebugCheckers.cpp - Debugging Checkers ---------------------*- C++ -*-==// // // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. // See https://llvm.org/LICENSE.txt for license information. // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // //===----------------------------------------------------------------------===// // // This file defines checkers that display debugging information. // //===----------------------------------------------------------------------===// #include "clang/StaticAnalyzer/Checkers/BuiltinCheckerRegistration.h" #include "clang/Analysis/Analyses/Dominators.h" #include "clang/Analysis/Analyses/LiveVariables.h" #include "clang/Analysis/CallGraph.h" #include "clang/StaticAnalyzer/Core/Checker.h" #include "clang/StaticAnalyzer/Core/BugReporter/BugType.h" #include "clang/StaticAnalyzer/Core/PathSensitive/AnalysisManager.h" #include "clang/StaticAnalyzer/Core/PathSensitive/CheckerContext.h" #include "clang/StaticAnalyzer/Core/PathSensitive/ExplodedGraph.h" #include "clang/StaticAnalyzer/Core/PathSensitive/ExprEngine.h" #include "llvm/Support/Process.h" using namespace clang; using namespace ento; //===----------------------------------------------------------------------===// // DominatorsTreeDumper //===----------------------------------------------------------------------===// namespace { class DominatorsTreeDumper : public Checker<check::ASTCodeBody> { public: void checkASTCodeBody(const Decl *D, AnalysisManager& mgr, BugReporter &BR) const { if (AnalysisDeclContext *AC = mgr.getAnalysisDeclContext(D)) { CFGDomTree Dom; Dom.buildDominatorTree(AC->getCFG()); Dom.dump(); } } }; } void ento::registerDominatorsTreeDumper(CheckerManager &mgr) { mgr.registerChecker<DominatorsTreeDumper>(); } bool ento::shouldRegisterDominatorsTreeDumper(const CheckerManager &mgr) { return true; } //===----------------------------------------------------------------------===// // PostDominatorsTreeDumper //===----------------------------------------------------------------------===// namespace { class PostDominatorsTreeDumper : public Checker<check::ASTCodeBody> { public: void checkASTCodeBody(const Decl *D, AnalysisManager& mgr, BugReporter &BR) const { if (AnalysisDeclContext *AC = mgr.getAnalysisDeclContext(D)) { CFGPostDomTree Dom; Dom.buildDominatorTree(AC->getCFG()); Dom.dump(); } } }; } void ento::registerPostDominatorsTreeDumper(CheckerManager &mgr) { mgr.registerChecker<PostDominatorsTreeDumper>(); } bool ento::shouldRegisterPostDominatorsTreeDumper(const CheckerManager &mgr) { return true; } //===----------------------------------------------------------------------===// // ControlDependencyTreeDumper //===----------------------------------------------------------------------===// namespace { class ControlDependencyTreeDumper : public Checker<check::ASTCodeBody> { public: void checkASTCodeBody(const Decl *D, AnalysisManager& mgr, BugReporter &BR) const { if (AnalysisDeclContext *AC = mgr.getAnalysisDeclContext(D)) { ControlDependencyCalculator Dom(AC->getCFG()); Dom.dump(); } } }; } void ento::registerControlDependencyTreeDumper(CheckerManager &mgr) { mgr.registerChecker<ControlDependencyTreeDumper>(); } bool ento::shouldRegisterControlDependencyTreeDumper(const CheckerManager &mgr) { return true; } //===----------------------------------------------------------------------===// // LiveVariablesDumper //===----------------------------------------------------------------------===// namespace { class LiveVariablesDumper : public Checker<check::ASTCodeBody> { public: void checkASTCodeBody(const Decl *D, AnalysisManager& mgr, BugReporter &BR) const { if (LiveVariables* L = mgr.getAnalysis<LiveVariables>(D)) { L->dumpBlockLiveness(mgr.getSourceManager()); } } }; } void ento::registerLiveVariablesDumper(CheckerManager &mgr) { mgr.registerChecker<LiveVariablesDumper>(); } bool ento::shouldRegisterLiveVariablesDumper(const CheckerManager &mgr) { return true; } //===----------------------------------------------------------------------===// // LiveStatementsDumper //===----------------------------------------------------------------------===// namespace { class LiveStatementsDumper : public Checker<check::ASTCodeBody> { public: void checkASTCodeBody(const Decl *D, AnalysisManager& Mgr, BugReporter &BR) const { if (LiveVariables *L = Mgr.getAnalysis<RelaxedLiveVariables>(D)) L->dumpStmtLiveness(Mgr.getSourceManager()); } }; } void ento::registerLiveStatementsDumper(CheckerManager &mgr) { mgr.registerChecker<LiveStatementsDumper>(); } bool ento::shouldRegisterLiveStatementsDumper(const CheckerManager &mgr) { return true; } //===----------------------------------------------------------------------===// // CFGViewer //===----------------------------------------------------------------------===// namespace { class CFGViewer : public Checker<check::ASTCodeBody> { public: void checkASTCodeBody(const Decl *D, AnalysisManager& mgr, BugReporter &BR) const { if (CFG *cfg = mgr.getCFG(D)) { cfg->viewCFG(mgr.getLangOpts()); } } }; } void ento::registerCFGViewer(CheckerManager &mgr) { mgr.registerChecker<CFGViewer>(); } bool ento::shouldRegisterCFGViewer(const CheckerManager &mgr) { return true; } //===----------------------------------------------------------------------===// // CFGDumper //===----------------------------------------------------------------------===// namespace { class CFGDumper : public Checker<check::ASTCodeBody> { public: void checkASTCodeBody(const Decl *D, AnalysisManager& mgr, BugReporter &BR) const { PrintingPolicy Policy(mgr.getLangOpts()); Policy.TerseOutput = true; Policy.PolishForDeclaration = true; D->print(llvm::errs(), Policy); if (CFG *cfg = mgr.getCFG(D)) { cfg->dump(mgr.getLangOpts(), llvm::sys::Process::StandardErrHasColors()); } } }; } void ento::registerCFGDumper(CheckerManager &mgr) { mgr.registerChecker<CFGDumper>(); } bool ento::shouldRegisterCFGDumper(const CheckerManager &mgr) { return true; } //===----------------------------------------------------------------------===// // CallGraphViewer //===----------------------------------------------------------------------===// namespace { class CallGraphViewer : public Checker< check::ASTDecl<TranslationUnitDecl> > { public: void checkASTDecl(const TranslationUnitDecl *TU, AnalysisManager& mgr, BugReporter &BR) const { CallGraph CG; CG.addToCallGraph(const_cast<TranslationUnitDecl*>(TU)); CG.viewGraph(); } }; } void ento::registerCallGraphViewer(CheckerManager &mgr) { mgr.registerChecker<CallGraphViewer>(); } bool ento::shouldRegisterCallGraphViewer(const CheckerManager &mgr) { return true; } //===----------------------------------------------------------------------===// // CallGraphDumper //===----------------------------------------------------------------------===// namespace { class CallGraphDumper : public Checker< check::ASTDecl<TranslationUnitDecl> > { public: void checkASTDecl(const TranslationUnitDecl *TU, AnalysisManager& mgr, BugReporter &BR) const { CallGraph CG; CG.addToCallGraph(const_cast<TranslationUnitDecl*>(TU)); CG.dump(); } }; } void ento::registerCallGraphDumper(CheckerManager &mgr) { mgr.registerChecker<CallGraphDumper>(); } bool ento::shouldRegisterCallGraphDumper(const CheckerManager &mgr) { return true; } //===----------------------------------------------------------------------===// // ConfigDumper //===----------------------------------------------------------------------===// namespace { class ConfigDumper : public Checker< check::EndOfTranslationUnit > { typedef AnalyzerOptions::ConfigTable Table; static int compareEntry(const Table::MapEntryTy *const *LHS, const Table::MapEntryTy *const *RHS) { return (*LHS)->getKey().compare((*RHS)->getKey()); } public: void checkEndOfTranslationUnit(const TranslationUnitDecl *TU, AnalysisManager& mgr, BugReporter &BR) const { const Table &Config = mgr.options.Config; SmallVector<const Table::MapEntryTy *, 32> Keys; for (Table::const_iterator I = Config.begin(), E = Config.end(); I != E; ++I) Keys.push_back(&*I); llvm::array_pod_sort(Keys.begin(), Keys.end(), compareEntry); llvm::errs() << "[config]\n"; for (unsigned I = 0, E = Keys.size(); I != E; ++I) llvm::errs() << Keys[I]->getKey() << " = " << (Keys[I]->second.empty() ? "\"\"" : Keys[I]->second) << '\n'; } }; } void ento::registerConfigDumper(CheckerManager &mgr) { mgr.registerChecker<ConfigDumper>(); } bool ento::shouldRegisterConfigDumper(const CheckerManager &mgr) { return true; } //===----------------------------------------------------------------------===// // ExplodedGraph Viewer //===----------------------------------------------------------------------===// namespace { class ExplodedGraphViewer : public Checker< check::EndAnalysis > { public: ExplodedGraphViewer() {} void checkEndAnalysis(ExplodedGraph &G, BugReporter &B,ExprEngine &Eng) const { Eng.ViewGraph(0); } }; } void ento::registerExplodedGraphViewer(CheckerManager &mgr) { mgr.registerChecker<ExplodedGraphViewer>(); } bool ento::shouldRegisterExplodedGraphViewer(const CheckerManager &mgr) { return true; } //===----------------------------------------------------------------------===// // Emits a report for every Stmt that the analyzer visits. //===----------------------------------------------------------------------===// namespace { class ReportStmts : public Checker<check::PreStmt<Stmt>> { BuiltinBug BT_stmtLoc{this, "Statement"}; public: void checkPreStmt(const Stmt *S, CheckerContext &C) const { ExplodedNode *Node = C.generateNonFatalErrorNode(); if (!Node) return; auto Report = std::make_unique<PathSensitiveBugReport>(BT_stmtLoc, "Statement", Node); C.emitReport(std::move(Report)); } }; } // end of anonymous namespace void ento::registerReportStmts(CheckerManager &mgr) { mgr.registerChecker<ReportStmts>(); } bool ento::shouldRegisterReportStmts(const CheckerManager &mgr) { return true; }
Upload File
Create Folder