003 File Manager
Current Path:
/usr/src/contrib/llvm-project/clang/lib/StaticAnalyzer/Core
usr
/
src
/
contrib
/
llvm-project
/
clang
/
lib
/
StaticAnalyzer
/
Core
/
📁
..
📄
APSIntType.cpp
(1.53 KB)
📄
AnalysisManager.cpp
(2.59 KB)
📄
AnalyzerOptions.cpp
(6.85 KB)
📄
BasicValueFactory.cpp
(9.8 KB)
📄
BlockCounter.cpp
(2.5 KB)
📄
BugReporter.cpp
(115.16 KB)
📄
BugReporterVisitors.cpp
(105.05 KB)
📄
CallEvent.cpp
(50.1 KB)
📄
Checker.cpp
(1.42 KB)
📄
CheckerContext.cpp
(4.54 KB)
📄
CheckerHelpers.cpp
(4.38 KB)
📄
CheckerManager.cpp
(32.45 KB)
📄
CheckerRegistryData.cpp
(8.19 KB)
📄
CommonBugCategories.cpp
(1.03 KB)
📄
ConstraintManager.cpp
(1.69 KB)
📄
CoreEngine.cpp
(22.98 KB)
📄
DynamicSize.cpp
(2.76 KB)
📄
DynamicType.cpp
(11.09 KB)
📄
Environment.cpp
(8.97 KB)
📄
ExplodedGraph.cpp
(17.8 KB)
📄
ExprEngine.cpp
(119.37 KB)
📄
ExprEngineC.cpp
(43.12 KB)
📄
ExprEngineCXX.cpp
(43.21 KB)
📄
ExprEngineCallAndReturn.cpp
(43.63 KB)
📄
ExprEngineObjC.cpp
(11.57 KB)
📄
FunctionSummary.cpp
(1000 B)
📄
HTMLDiagnostics.cpp
(36.55 KB)
📄
IssueHash.cpp
(6.14 KB)
📄
LoopUnrolling.cpp
(11.23 KB)
📄
LoopWidening.cpp
(4.03 KB)
📄
MemRegion.cpp
(55.71 KB)
📄
PlistDiagnostics.cpp
(43.27 KB)
📄
PrettyStackTraceLocationContext.h
(1.3 KB)
📄
ProgramState.cpp
(21.81 KB)
📄
RangeConstraintManager.cpp
(50.62 KB)
📄
RangedConstraintManager.cpp
(8.08 KB)
📄
RegionStore.cpp
(97.14 KB)
📄
SMTConstraintManager.cpp
(657 B)
📄
SValBuilder.cpp
(23.41 KB)
📄
SVals.cpp
(12.25 KB)
📄
SarifDiagnostics.cpp
(14.69 KB)
📄
SimpleConstraintManager.cpp
(4.57 KB)
📄
SimpleSValBuilder.cpp
(50.41 KB)
📄
Store.cpp
(21.79 KB)
📄
SymbolManager.cpp
(16.21 KB)
📄
TextDiagnostics.cpp
(5.82 KB)
📄
WorkList.cpp
(8.62 KB)
Editing: CheckerHelpers.cpp
//===---- CheckerHelpers.cpp - Helper functions for 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 several static functions for use in checkers. // //===----------------------------------------------------------------------===// #include "clang/StaticAnalyzer/Core/PathSensitive/CheckerHelpers.h" #include "clang/AST/Decl.h" #include "clang/AST/Expr.h" #include "clang/Lex/Preprocessor.h" namespace clang { namespace ento { // Recursively find any substatements containing macros bool containsMacro(const Stmt *S) { if (S->getBeginLoc().isMacroID()) return true; if (S->getEndLoc().isMacroID()) return true; for (const Stmt *Child : S->children()) if (Child && containsMacro(Child)) return true; return false; } // Recursively find any substatements containing enum constants bool containsEnum(const Stmt *S) { const DeclRefExpr *DR = dyn_cast<DeclRefExpr>(S); if (DR && isa<EnumConstantDecl>(DR->getDecl())) return true; for (const Stmt *Child : S->children()) if (Child && containsEnum(Child)) return true; return false; } // Recursively find any substatements containing static vars bool containsStaticLocal(const Stmt *S) { const DeclRefExpr *DR = dyn_cast<DeclRefExpr>(S); if (DR) if (const VarDecl *VD = dyn_cast<VarDecl>(DR->getDecl())) if (VD->isStaticLocal()) return true; for (const Stmt *Child : S->children()) if (Child && containsStaticLocal(Child)) return true; return false; } // Recursively find any substatements containing __builtin_offsetof bool containsBuiltinOffsetOf(const Stmt *S) { if (isa<OffsetOfExpr>(S)) return true; for (const Stmt *Child : S->children()) if (Child && containsBuiltinOffsetOf(Child)) return true; return false; } // Extract lhs and rhs from assignment statement std::pair<const clang::VarDecl *, const clang::Expr *> parseAssignment(const Stmt *S) { const VarDecl *VD = nullptr; const Expr *RHS = nullptr; if (auto Assign = dyn_cast_or_null<BinaryOperator>(S)) { if (Assign->isAssignmentOp()) { // Ordinary assignment RHS = Assign->getRHS(); if (auto DE = dyn_cast_or_null<DeclRefExpr>(Assign->getLHS())) VD = dyn_cast_or_null<VarDecl>(DE->getDecl()); } } else if (auto PD = dyn_cast_or_null<DeclStmt>(S)) { // Initialization assert(PD->isSingleDecl() && "We process decls one by one"); VD = cast<VarDecl>(PD->getSingleDecl()); RHS = VD->getAnyInitializer(); } return std::make_pair(VD, RHS); } Nullability getNullabilityAnnotation(QualType Type) { const auto *AttrType = Type->getAs<AttributedType>(); if (!AttrType) return Nullability::Unspecified; if (AttrType->getAttrKind() == attr::TypeNullable) return Nullability::Nullable; else if (AttrType->getAttrKind() == attr::TypeNonNull) return Nullability::Nonnull; return Nullability::Unspecified; } llvm::Optional<int> tryExpandAsInteger(StringRef Macro, const Preprocessor &PP) { const auto *MacroII = PP.getIdentifierInfo(Macro); if (!MacroII) return llvm::None; const MacroInfo *MI = PP.getMacroInfo(MacroII); if (!MI) return llvm::None; // Filter out parens. std::vector<Token> FilteredTokens; FilteredTokens.reserve(MI->tokens().size()); for (auto &T : MI->tokens()) if (!T.isOneOf(tok::l_paren, tok::r_paren)) FilteredTokens.push_back(T); // Parse an integer at the end of the macro definition. const Token &T = FilteredTokens.back(); // FIXME: EOF macro token coming from a PCH file on macOS while marked as // literal, doesn't contain any literal data if (!T.isLiteral() || !T.getLiteralData()) return llvm::None; StringRef ValueStr = StringRef(T.getLiteralData(), T.getLength()); llvm::APInt IntValue; constexpr unsigned AutoSenseRadix = 0; if (ValueStr.getAsInteger(AutoSenseRadix, IntValue)) return llvm::None; // Parse an optional minus sign. size_t Size = FilteredTokens.size(); if (Size >= 2) { if (FilteredTokens[Size - 2].is(tok::minus)) IntValue = -IntValue; } return IntValue.getSExtValue(); } } // namespace ento } // namespace clang
Upload File
Create Folder