clang 22.0.0git
RetainCountDiagnostics.cpp File Reference
#include "RetainCountDiagnostics.h"
#include "RetainCountChecker.h"
#include "llvm/ADT/STLExtras.h"
#include "llvm/ADT/SmallVector.h"
#include <optional>

Go to the source code of this file.

Classes

class  clang::ento::retaincountchecker::RefCountReportVisitor
class  clang::ento::retaincountchecker::RefLeakReportVisitor

Namespaces

namespace  clang
 The JSON file list parser is used to communicate input to InstallAPI.
namespace  clang::ento
namespace  clang::ento::retaincountchecker

Typedefs

using Bindings = llvm::SmallVector<std::pair<const MemRegion *, SVal>, 4>

Functions

static bool isNumericLiteralExpression (const Expr *E)
static std::string getPrettyTypeName (QualType QT)
 If type represents a pointer to CXXRecordDecl, and is not a typedef, return the decl name.
static bool shouldGenerateNote (llvm::raw_string_ostream &os, const RefVal *PrevT, const RefVal &CurrV, bool DeallocSent)
 Write information about the type state change to os, return whether the note should be generated.
static std::optional< unsignedfindArgIdxOfSymbol (ProgramStateRef CurrSt, const LocationContext *LCtx, SymbolRef &Sym, std::optional< CallEventRef<> > CE)
 Finds argument index of the out paramter in the call S corresponding to the symbol Sym.
static std::optional< std::string > findMetaClassAlloc (const Expr *Callee)
static std::string findAllocatedObjectName (const Stmt *S, QualType QT)
static void generateDiagnosticsForCallLike (ProgramStateRef CurrSt, const LocationContext *LCtx, const RefVal &CurrV, SymbolRef &Sym, const Stmt *S, llvm::raw_string_ostream &os)
static const ExplodedNodegetCalleeNode (const ExplodedNode *Pred)
 Find the first node with the parent stack frame.
static std::shared_ptr< PathDiagnosticEventPieceannotateConsumedSummaryMismatch (const ExplodedNode *N, CallExitBegin &CallExitLoc, const SourceManager &SM, CallEventManager &CEMgr)
 Insert a diagnostic piece at function exit if a function parameter is annotated as "os_consumed", but it does not actually consume the reference.
static std::shared_ptr< PathDiagnosticEventPieceannotateStartParameter (const ExplodedNode *N, SymbolRef Sym, const SourceManager &SM)
 Annotate the parameter at the analysis entry point.
static std::optional< std::string > describeRegion (const MemRegion *MR)
static Bindings getAllVarBindingsForSymbol (ProgramStateManager &Manager, const ExplodedNode *Node, SymbolRef Sym)
static AllocationInfo GetAllocationSite (ProgramStateManager &StateMgr, const ExplodedNode *N, SymbolRef Sym)

Typedef Documentation

◆ Bindings

Function Documentation

◆ annotateConsumedSummaryMismatch()

◆ annotateStartParameter()

◆ describeRegion()

std::optional< std::string > describeRegion ( const MemRegion * MR)
static

◆ findAllocatedObjectName()

std::string findAllocatedObjectName ( const Stmt * S,
QualType QT )
static

◆ findArgIdxOfSymbol()

std::optional< unsigned > findArgIdxOfSymbol ( ProgramStateRef CurrSt,
const LocationContext * LCtx,
SymbolRef & Sym,
std::optional< CallEventRef<> > CE )
static

Finds argument index of the out paramter in the call S corresponding to the symbol Sym.

If none found, returns std::nullopt.

Definition at line 120 of file RetainCountDiagnostics.cpp.

Referenced by generateDiagnosticsForCallLike().

◆ findMetaClassAlloc()

std::optional< std::string > findMetaClassAlloc ( const Expr * Callee)
static

◆ generateDiagnosticsForCallLike()

◆ GetAllocationSite()

◆ getAllVarBindingsForSymbol()

◆ getCalleeNode()

◆ getPrettyTypeName()

std::string getPrettyTypeName ( QualType QT)
static

If type represents a pointer to CXXRecordDecl, and is not a typedef, return the decl name.

Otherwise, return the serialization of type.

Definition at line 33 of file RetainCountDiagnostics.cpp.

References clang::Type::getAs(), clang::Type::getAsCXXRecordDecl(), clang::QualType::getAsString(), clang::Type::getPointeeType(), and clang::QualType::isNull().

Referenced by findAllocatedObjectName(), and clang::ento::retaincountchecker::RefLeakReportVisitor::getEndPath().

◆ isNumericLiteralExpression()

bool isNumericLiteralExpression ( const Expr * E)
static

◆ shouldGenerateNote()