reference, declarationdefinition
definition → references, declarations, derived classes, virtual overrides
reference to multiple definitions → definitions
unreferenced

References

tools/clang/lib/CodeGen/CGCoroutine.cpp
  182       CodeGenFunction::OpaqueValueMappingData::bind(CGF, S.getOpaqueValue(), E);
  183   auto UnbindOnExit = llvm::make_scope_exit([&] { Binder.unbind(CGF); });
  186   BasicBlock *ReadyBlock = CGF.createBasicBlock(Prefix + Twine(".ready"));
  187   BasicBlock *SuspendBlock = CGF.createBasicBlock(Prefix + Twine(".suspend"));
  188   BasicBlock *CleanupBlock = CGF.createBasicBlock(Prefix + Twine(".cleanup"));
  191   CGF.EmitBranchOnBoolExpr(S.getReadyExpr(), ReadyBlock, SuspendBlock, 0);
  194   CGF.EmitBlock(SuspendBlock);
  196   auto &Builder = CGF.Builder;
  197   llvm::Function *CoroSave = CGF.CGM.getIntrinsic(llvm::Intrinsic::coro_save);
  198   auto *NullPtr = llvm::ConstantPointerNull::get(CGF.CGM.Int8PtrTy);
  201   auto *SuspendRet = CGF.EmitScalarExpr(S.getSuspendExpr());
  205         CGF.createBasicBlock(Prefix + Twine(".suspend.bool"));
  206     CGF.Builder.CreateCondBr(SuspendRet, RealSuspendBlock, ReadyBlock);
  207     CGF.EmitBlock(RealSuspendBlock);
  213       CGF.CGM.getIntrinsic(llvm::Intrinsic::coro_suspend);
  223   CGF.EmitBlock(CleanupBlock);
  224   CGF.EmitBranchThroughCleanup(Coro.CleanupJD);
  227   CGF.EmitBlock(ReadyBlock);
  235         CGF.CreateTempAlloca(Builder.getInt1Ty(), Prefix + Twine("resume.eh"));
  239     auto *Catch = new (CGF.getContext())
  242         CompoundStmt::Create(CGF.getContext(), S.getResumeExpr(), Loc, Loc);
  243     TryStmt = CXXTryStmt::Create(CGF.getContext(), Loc, TryBody, Catch);
  244     CGF.EnterCXXTryStmt(*TryStmt);
  249     Res.LV = CGF.EmitLValue(S.getResumeExpr());
  251     Res.RV = CGF.EmitAnyExpr(S.getResumeExpr(), aggSlot, ignoreResult);
  255     CGF.ExitCXXTryStmt(*TryStmt);