Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
attributes: fix compile error with instrumented async functions (#1616)
## Motivation The changes in #1607 introduced a potential compilation error when using the `#[instrument]` attribute on `async fn`s that return a type that includes a closure or is otherwise unnameable. This is because the future's body code was quoted in two separate places in order to have a separate branch when the span is statically disabled. This means that when a closure is returned, it will technically have two distinct types based on whether or not the span is enabled, since it originates from two separate source code locations (although `quote_spanned!` obscures this, so the compiler diagnostic will appear to have two closures originating from the same location). ## Solution This branch fixes this issue by changing the code generated for `#[instrument]`ed async functions. Unfortunately, for async functions, we can't have the optimization of not creating the span at all when the level is disabled, because we need to create the span _before_ creating the future, as it may borrow arguments. I've also added tests reproducing issue #1615 Fixes #1615
- Loading branch information