================ @@ -140,77 +129,78 @@ lldb_private::formatters::StdlibCoroutineHandleSyntheticFrontEnd::Update() { if (frame_ptr_addr == 0 || frame_ptr_addr == LLDB_INVALID_ADDRESS) return lldb::ChildCacheState::eRefetch; - auto ast_ctx = valobj_sp->GetCompilerType().GetTypeSystem<TypeSystemClang>(); - if (!ast_ctx) - return lldb::ChildCacheState::eRefetch; - - // Create the `resume` and `destroy` children. lldb::TargetSP target_sp = m_backend.GetTargetSP(); auto &exe_ctx = m_backend.GetExecutionContextRef(); lldb::ProcessSP process_sp = target_sp->GetProcessSP(); auto ptr_size = process_sp->GetAddressByteSize(); - CompilerType void_type = ast_ctx->GetBasicType(lldb::eBasicTypeVoid); - std::array<CompilerType, 1> args{void_type}; - CompilerType coro_func_type = ast_ctx->CreateFunctionType( - /*result_type=*/void_type, args, - /*is_variadic=*/false, /*qualifiers=*/0); - CompilerType coro_func_ptr_type = coro_func_type.GetPointerType(); - m_resume_ptr_sp = CreateValueObjectFromAddress( - "resume", frame_ptr_addr + 0 * ptr_size, exe_ctx, coro_func_ptr_type); - lldbassert(m_resume_ptr_sp); - m_destroy_ptr_sp = CreateValueObjectFromAddress( - "destroy", frame_ptr_addr + 1 * ptr_size, exe_ctx, coro_func_ptr_type); - lldbassert(m_destroy_ptr_sp); - - // Get the `promise_type` from the template argument - CompilerType promise_type( - valobj_sp->GetCompilerType().GetTypeTemplateArgument(0)); - if (!promise_type) + auto ast_ctx = valobj_sp->GetCompilerType().GetTypeSystem<TypeSystemClang>(); + if (!ast_ctx) return lldb::ChildCacheState::eRefetch; - // Try to infer the promise_type if it was type-erased + // Determine the coroutine frame type and the promise type. Fall back + // to `void`, since even the pointer itself might be useful, even if the + // type inference failed. + Function *destroy_func = ExtractDestroyFunction(target_sp, frame_ptr_addr); + CompilerType void_type = ast_ctx->GetBasicType(lldb::eBasicTypeVoid); + CompilerType promise_type; + if (CompilerType template_argt = ---------------- labath wrote:
normally we'd call this `template_arg` https://github.com/llvm/llvm-project/pull/141516 _______________________________________________ lldb-commits mailing list lldb-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits