[Lldb-commits] [lldb] [lldb] Show coro_frame in `std::coroutine_handle` pretty printer (PR #141516)
Pavel Labath via lldb-commits
lldb-commits at lists.llvm.org
Wed Jun 11 03:03:11 PDT 2025
================
@@ -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
More information about the lldb-commits
mailing list