static const MemRegion *unwrapRValueReferenceIndirection(const MemRegion *MR) { if (const auto *SR = dyn_cast_or_null<SymbolicRegion>(MR)) { SymbolRef Sym = SR->getSymbol(); if (Sym->getType()->isRValueReferenceType()) if (const MemRegion *OriginMR = Sym->getOriginRegion()) return OriginMR; } return MR; }
void RefLeakReport::deriveParamLocation(CheckerContext &Ctx, SymbolRef sym) { const SourceManager& SMgr = Ctx.getSourceManager(); if (!sym->getOriginRegion()) return; auto *Region = dyn_cast<DeclRegion>(sym->getOriginRegion()); if (Region) { const Decl *PDecl = Region->getDecl(); if (PDecl && isa<ParmVarDecl>(PDecl)) { PathDiagnosticLocation ParamLocation = PathDiagnosticLocation::create(PDecl, SMgr); Location = ParamLocation; UniqueingLocation = ParamLocation; UniqueingDecl = Ctx.getLocationContext()->getDecl(); } } }