static ExprResult buildCoroutineHandle(Sema &S, QualType PromiseType, SourceLocation Loc) { QualType CoroHandleType = lookupCoroutineHandleType(S, PromiseType, Loc); if (CoroHandleType.isNull()) return ExprError(); DeclContext *LookupCtx = S.computeDeclContext(CoroHandleType); LookupResult Found(S, &S.PP.getIdentifierTable().get("from_address"), Loc, Sema::LookupOrdinaryName); if (!S.LookupQualifiedName(Found, LookupCtx)) { S.Diag(Loc, diag::err_coroutine_handle_missing_member) << "from_address"; return ExprError(); } Expr *FramePtr = buildBuiltinCall(S, Loc, Builtin::BI__builtin_coro_frame, {}); CXXScopeSpec SS; ExprResult FromAddr = S.BuildDeclarationNameExpr(SS, Found, /*NeedsADL=*/false); if (FromAddr.isInvalid()) return ExprError(); return S.ActOnCallExpr(nullptr, FromAddr.get(), Loc, FramePtr, Loc); }