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: DynamicSize.cpp
//===- DynamicSize.cpp - Dynamic size related APIs --------------*- 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 APIs that track and query dynamic size information. // //===----------------------------------------------------------------------===// #include "clang/StaticAnalyzer/Core/PathSensitive/DynamicSize.h" #include "clang/AST/Expr.h" #include "clang/Basic/LLVM.h" #include "clang/StaticAnalyzer/Core/PathSensitive/MemRegion.h" #include "clang/StaticAnalyzer/Core/PathSensitive/ProgramState.h" #include "clang/StaticAnalyzer/Core/PathSensitive/SValBuilder.h" #include "clang/StaticAnalyzer/Core/PathSensitive/SVals.h" #include "clang/StaticAnalyzer/Core/PathSensitive/SymbolManager.h" namespace clang { namespace ento { DefinedOrUnknownSVal getDynamicSize(ProgramStateRef State, const MemRegion *MR, SValBuilder &SVB) { return MR->getMemRegionManager().getStaticSize(MR, SVB); } DefinedOrUnknownSVal getDynamicElementCount(ProgramStateRef State, const MemRegion *MR, SValBuilder &SVB, QualType ElementTy) { MemRegionManager &MemMgr = MR->getMemRegionManager(); ASTContext &Ctx = MemMgr.getContext(); DefinedOrUnknownSVal Size = getDynamicSize(State, MR, SVB); SVal ElementSizeV = SVB.makeIntVal( Ctx.getTypeSizeInChars(ElementTy).getQuantity(), SVB.getArrayIndexType()); SVal DivisionV = SVB.evalBinOp(State, BO_Div, Size, ElementSizeV, SVB.getArrayIndexType()); return DivisionV.castAs<DefinedOrUnknownSVal>(); } SVal getDynamicSizeWithOffset(ProgramStateRef State, const SVal &BufV) { SValBuilder &SvalBuilder = State->getStateManager().getSValBuilder(); const MemRegion *MRegion = BufV.getAsRegion(); if (!MRegion) return UnknownVal(); RegionOffset Offset = MRegion->getAsOffset(); if (Offset.hasSymbolicOffset()) return UnknownVal(); const MemRegion *BaseRegion = MRegion->getBaseRegion(); if (!BaseRegion) return UnknownVal(); NonLoc OffsetInBytes = SvalBuilder.makeArrayIndex( Offset.getOffset() / MRegion->getMemRegionManager().getContext().getCharWidth()); DefinedOrUnknownSVal ExtentInBytes = getDynamicSize(State, BaseRegion, SvalBuilder); return SvalBuilder.evalBinOp(State, BinaryOperator::Opcode::BO_Sub, ExtentInBytes, OffsetInBytes, SvalBuilder.getArrayIndexType()); } } // namespace ento } // namespace clang
Upload File
Create Folder