Lines Matching refs:Path

214   IndirectLocalPath &Path;  member
215 unsigned OldSize = Path.size();
216 RevertToOldSizeRAII(IndirectLocalPath &Path) : Path(Path) {} in RevertToOldSizeRAII()
217 ~RevertToOldSizeRAII() { Path.resize(OldSize); } in ~RevertToOldSizeRAII()
220 using LocalVisitor = llvm::function_ref<bool(IndirectLocalPath &Path, Local L,
224 static bool isVarOnPath(IndirectLocalPath &Path, VarDecl *VD) { in isVarOnPath() argument
225 for (auto E : Path) in isVarOnPath()
231 static bool pathContainsInit(IndirectLocalPath &Path) { in pathContainsInit() argument
232 return llvm::any_of(Path, [=](IndirectLocalPathEntry E) { in pathContainsInit()
238 static void visitLocalsRetainedByInitializer(IndirectLocalPath &Path,
243 static void visitLocalsRetainedByReferenceBinding(IndirectLocalPath &Path,
329 static void handleGslAnnotatedTypes(IndirectLocalPath &Path, Expr *Call, in handleGslAnnotatedTypes() argument
338 for (const IndirectLocalPathEntry &PE : llvm::reverse(Path)) { in handleGslAnnotatedTypes()
347 Path.push_back({Value ? IndirectLocalPathEntry::GslPointerInit in handleGslAnnotatedTypes()
351 visitLocalsRetainedByReferenceBinding(Path, Arg, RK_ReferenceBinding, in handleGslAnnotatedTypes()
355 visitLocalsRetainedByInitializer(Path, Arg, Visit, true, in handleGslAnnotatedTypes()
357 Path.pop_back(); in handleGslAnnotatedTypes()
426 static void visitLifetimeBoundArguments(IndirectLocalPath &Path, Expr *Call, in visitLifetimeBoundArguments() argument
451 Path.push_back({IndirectLocalPathEntry::LifetimeBoundCall, Arg, D}); in visitLifetimeBoundArguments()
453 visitLocalsRetainedByReferenceBinding(Path, Arg, RK_ReferenceBinding, in visitLifetimeBoundArguments()
457 visitLocalsRetainedByInitializer(Path, Arg, Visit, true, in visitLifetimeBoundArguments()
459 Path.pop_back(); in visitLifetimeBoundArguments()
493 static void visitLocalsRetainedByReferenceBinding(IndirectLocalPath &Path, in visitLocalsRetainedByReferenceBinding() argument
497 RevertToOldSizeRAII RAII(Path); in visitLocalsRetainedByReferenceBinding()
533 return visitLocalsRetainedByInitializer(Path, Init, Visit, true, in visitLocalsRetainedByReferenceBinding()
540 Path.push_back( in visitLocalsRetainedByReferenceBinding()
547 if (Visit(Path, Local(MTE), RK)) in visitLocalsRetainedByReferenceBinding()
548 visitLocalsRetainedByInitializer(Path, MTE->getSubExpr(), Visit, true, in visitLocalsRetainedByReferenceBinding()
556 visitLocalsRetainedByInitializer(Path, M->getBase(), Visit, true, in visitLocalsRetainedByReferenceBinding()
562 handleGslAnnotatedTypes(Path, Init, Visit); in visitLocalsRetainedByReferenceBinding()
563 return visitLifetimeBoundArguments(Path, Init, Visit); in visitLocalsRetainedByReferenceBinding()
575 Visit(Path, Local(DRE), RK); in visitLocalsRetainedByReferenceBinding()
580 } else if (VD->getInit() && !isVarOnPath(Path, VD)) { in visitLocalsRetainedByReferenceBinding()
581 Path.push_back({IndirectLocalPathEntry::VarInit, DRE, VD}); in visitLocalsRetainedByReferenceBinding()
582 visitLocalsRetainedByReferenceBinding(Path, VD->getInit(), in visitLocalsRetainedByReferenceBinding()
596 visitLocalsRetainedByInitializer(Path, U->getSubExpr(), Visit, true, in visitLocalsRetainedByReferenceBinding()
602 visitLocalsRetainedByInitializer(Path, in visitLocalsRetainedByReferenceBinding()
612 visitLocalsRetainedByReferenceBinding(Path, C->getTrueExpr(), RK, Visit, in visitLocalsRetainedByReferenceBinding()
615 visitLocalsRetainedByReferenceBinding(Path, C->getFalseExpr(), RK, Visit, in visitLocalsRetainedByReferenceBinding()
623 Visit(Path, Local(CLE), RK); in visitLocalsRetainedByReferenceBinding()
637 static void visitLocalsRetainedByInitializer(IndirectLocalPath &Path, in visitLocalsRetainedByInitializer() argument
641 RevertToOldSizeRAII RAII(Path); in visitLocalsRetainedByInitializer()
650 Path.push_back( in visitLocalsRetainedByInitializer()
672 Path.push_back({IndirectLocalPathEntry::LValToRVal, CE}); in visitLocalsRetainedByInitializer()
674 Path, Init, RK_ReferenceBinding, in visitLocalsRetainedByInitializer()
675 [&](IndirectLocalPath &Path, Local L, ReferenceKind RK) -> bool { in visitLocalsRetainedByInitializer() argument
679 !isVarOnPath(Path, VD)) { in visitLocalsRetainedByInitializer()
680 Path.push_back({IndirectLocalPathEntry::VarInit, DRE, VD}); in visitLocalsRetainedByInitializer()
682 Path, VD->getInit(), Visit, true, EnableLifetimeWarnings); in visitLocalsRetainedByInitializer()
686 visitLocalsRetainedByInitializer(Path, MTE->getSubExpr(), in visitLocalsRetainedByInitializer()
720 Path.push_back({IndirectLocalPathEntry::AddressOf, CE}); in visitLocalsRetainedByInitializer()
721 return visitLocalsRetainedByReferenceBinding(Path, CE->getSubExpr(), in visitLocalsRetainedByInitializer()
737 return visitLocalsRetainedByReferenceBinding(Path, ILE->getSubExpr(), in visitLocalsRetainedByInitializer()
749 return visitLocalsRetainedByInitializer(Path, ILE->getInit(0), Visit, in visitLocalsRetainedByInitializer()
755 visitLocalsRetainedByInitializer(Path, ILE->getInit(I), Visit, in visitLocalsRetainedByInitializer()
769 visitLocalsRetainedByReferenceBinding(Path, ILE->getInit(0), in visitLocalsRetainedByInitializer()
775 visitLocalsRetainedByInitializer(Path, ILE->getInit(Index), Visit, in visitLocalsRetainedByInitializer()
785 visitLocalsRetainedByReferenceBinding(Path, SubInit, in visitLocalsRetainedByInitializer()
793 Path, SubInit, Visit, RevisitSubinits, EnableLifetimeWarnings); in visitLocalsRetainedByInitializer()
811 Path.push_back({IndirectLocalPathEntry::LambdaCaptureInit, E, &Cap}); in visitLocalsRetainedByInitializer()
813 visitLocalsRetainedByReferenceBinding(Path, E, RK_ReferenceBinding, in visitLocalsRetainedByInitializer()
816 visitLocalsRetainedByInitializer(Path, E, Visit, true, in visitLocalsRetainedByInitializer()
819 Path.pop_back(); in visitLocalsRetainedByInitializer()
830 Path.push_back({IndirectLocalPathEntry::TemporaryCopy, Arg, in visitLocalsRetainedByInitializer()
832 visitLocalsRetainedByInitializer(Path, Arg, Visit, true, in visitLocalsRetainedByInitializer()
834 Path.pop_back(); in visitLocalsRetainedByInitializer()
841 handleGslAnnotatedTypes(Path, Init, Visit); in visitLocalsRetainedByInitializer()
842 return visitLifetimeBoundArguments(Path, Init, Visit); in visitLocalsRetainedByInitializer()
857 Path.push_back({IndirectLocalPathEntry::AddressOf, UO}); in visitLocalsRetainedByInitializer()
858 visitLocalsRetainedByReferenceBinding(Path, UO->getSubExpr(), in visitLocalsRetainedByInitializer()
873 visitLocalsRetainedByInitializer(Path, BO->getLHS(), Visit, true, in visitLocalsRetainedByInitializer()
876 visitLocalsRetainedByInitializer(Path, BO->getRHS(), Visit, true, in visitLocalsRetainedByInitializer()
887 visitLocalsRetainedByInitializer(Path, C->getTrueExpr(), Visit, true, in visitLocalsRetainedByInitializer()
890 visitLocalsRetainedByInitializer(Path, C->getFalseExpr(), Visit, true, in visitLocalsRetainedByInitializer()
898 Visit(Path, Local(cast<BlockExpr>(Init)), RK_ReferenceBinding); in visitLocalsRetainedByInitializer()
904 Visit(Path, Local(cast<AddrLabelExpr>(Init)), RK_ReferenceBinding); in visitLocalsRetainedByInitializer()
928 shouldLifetimeExtendThroughPath(const IndirectLocalPath &Path) { in shouldLifetimeExtendThroughPath() argument
930 for (auto Elem : Path) { in shouldLifetimeExtendThroughPath()
940 static SourceRange nextPathEntryRange(const IndirectLocalPath &Path, unsigned I, in nextPathEntryRange() argument
942 for (unsigned N = Path.size(); I != N; ++I) { in nextPathEntryRange()
943 switch (Path[I].Kind) { in nextPathEntryRange()
956 if (cast<VarDecl>(Path[I].D)->isImplicit()) in nextPathEntryRange()
960 return Path[I].E->getSourceRange(); in nextPathEntryRange()
963 if (!Path[I].Capture->capturesVariable()) in nextPathEntryRange()
965 return Path[I].E->getSourceRange(); in nextPathEntryRange()
971 static bool pathOnlyHandlesGslPointer(IndirectLocalPath &Path) { in pathOnlyHandlesGslPointer() argument
972 for (const auto &It : llvm::reverse(Path)) { in pathOnlyHandlesGslPointer()
1004 auto TemporaryVisitor = [&](IndirectLocalPath &Path, Local L, in checkExprLifetimeImpl()
1006 SourceRange DiagRange = nextPathEntryRange(Path, 0, L); in checkExprLifetimeImpl()
1013 if (pathOnlyHandlesGslPointer(Path)) { in checkExprLifetimeImpl()
1021 if (pathContainsInit(Path) || !IsLocalGslOwner) in checkExprLifetimeImpl()
1055 switch (shouldLifetimeExtendThroughPath(Path)) { in checkExprLifetimeImpl()
1079 if (pathContainsInit(Path)) in checkExprLifetimeImpl()
1092 if (!MTE || pathContainsInit(Path)) in checkExprLifetimeImpl()
1094 assert(shouldLifetimeExtendThroughPath(Path) == in checkExprLifetimeImpl()
1120 SemaRef.Diag(DiagLoc, shouldLifetimeExtendThroughPath(Path) != in checkExprLifetimeImpl()
1128 if (Path.empty() || in checkExprLifetimeImpl()
1129 Path.back().Kind != IndirectLocalPathEntry::DefaultInit) { in checkExprLifetimeImpl()
1147 if (pathContainsInit(Path)) in checkExprLifetimeImpl()
1152 if (IsLocalGslOwner && pathOnlyHandlesGslPointer(Path)) in checkExprLifetimeImpl()
1233 for (unsigned I = 0; I != Path.size(); ++I) { in checkExprLifetimeImpl()
1234 auto Elem = Path[I]; in checkExprLifetimeImpl()
1255 << FD << nextPathEntryRange(Path, I + 1, L); in checkExprLifetimeImpl()
1263 << VD->getDeclName() << nextPathEntryRange(Path, I + 1, L); in checkExprLifetimeImpl()
1277 << nextPathEntryRange(Path, I + 1, L); in checkExprLifetimeImpl()
1287 llvm::SmallVector<IndirectLocalPathEntry, 8> Path; in checkExprLifetimeImpl() local
1290 Path.push_back({IndirectLocalPathEntry::GslPointerAssignment, Init}); in checkExprLifetimeImpl()
1293 visitLocalsRetainedByReferenceBinding(Path, Init, RK_ReferenceBinding, in checkExprLifetimeImpl()
1298 Path, Init, TemporaryVisitor, in checkExprLifetimeImpl()