Skip to content

Symbol-mangling (v0) should show difference between async / closure / generator #104830

Description

@Swatinem

The following code:

pub async fn fn_with_nested_block() -> Backtrace {
    None.unwrap_or_else(|| async { Backtrace::force_capture() })
        .await
}

Generates the following demangled symbol with legacy demangling:

async_codegen::fn_with_nested_block::{{closure}}::{{closure}}::{{closure}}

(v0 mangling is similar, but with {closure#0} instead)

Whereas Windows mangling gives this fn name:

async_codegen::fn_with_nested_block::async_fn$0::closure$0::async_block$0

This makes it clear what is an async fn, closure or async block. v0 symbol mangling should make a similar distinction.

#104333 is a first attempt to thread the necessary information through to the place that does the symbol mangling, but actually extending the v0 symbol mangling format / spec is necessary as well to fully solve this.

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    A-closuresArea: Closures (`|…| { … }`)A-linkageArea: linking into static, shared libraries and binariesT-compilerRelevant to the compiler team, which will review and decide on the PR/issue.

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions