Are we async yet?
The long-awaited async/await syntax
has been stabilized in Rust 1.39.
You can use it with the active ecosystem of asynchronous I/O around
futures ,
mio ,
tokio , and
smol .
async syntax and blockers
async/await syntax
stabilized in 1.39
[in stable]
/
RFC 2394
/
#50547
Related issues under A-async-await
#161441 - rustc emits a vacant vtable slot for a callable boxed async service (Rust 1.98)
#159484 - Suggest awaiting impl Future value being printed
#153733 - [ICE]: explicit deref of non-derefable type
#153638 - Incorrect "implementation not general enough" error in async block
#152850 - "Impl not general enough" error for using an associated type with drop glue over an await point
#152141 - .await "blowing up" state machine unnecessarily
#151942 - Async function's future not Send even when non-Send type is not alive across await expression
#150609 - nightly: #[feature(async_drop)] causes stack overflow
#149438 - Maybe-sized RPIT type is unexpectedly allowed in async fn
#149407 - Send bound on RPITIT async method causes spurious lifetime errors
#149235 - Implementation is not general enough error with no context
#148511 - Internal Compiler Error
#148389 - async fn can assign to argument to change its lifetime, but normal fn and async blocks cannot.
#148335 - const in async fn is evaluated twice when used across crates.
#147041 - Async function generates potentially panicking code
#146547 - Disjoint capture in async blocks requires mut for Copy field modifications
#145127 - Cannot combine async fn-in-traits with AsyncFn{,Mut} closures
#144391 - dead value causes async future to not be Send
#144344 - Rust does not correctly handle async recursion with nice errors in certain cases
#143429 - Incorrect rejection of async code on type not living long enough
#142155 - ICE in tail_expr_drop_order lint
#142145 - closure-returning-async-block suggestion causes does not live long enough error
#140987 - Making trait method async causes inference failure (E0790)
#140728 - Polymorphic recursion in async fn gives "queries overflow the depth limit" error
#140725 - stack overflow while compiling async recursion
#140655 - consts in dead monomorphic async fn are never evaluated
#137698 - Migrating from Fn -> impl Future to AsyncFn breaks Send
#136726 - "implementation is not general enough" even if only 'static is used.
#135468 - Async function calls not optimized out
#135062 - Missing Send on "recursive" Future
#134101 - rustc doesn't infer that the future of a recursive async fn is Send.
#132050 - Repeated calls to the same async fn can cause stack overflow
#131661 - Returning bare trait from an async function gives subpar suggestion
#131336 - Adding explicit lifetimes causes compilation error
#130935 - Outlives requirements are not implied in the return type of async fn, and generally for RPIT
#130596 - Send bound of trait object make unexpected async block is not general enough error
#130113 - Bogus "implementation of <whatever trait you want> is not general enough" with RPITIT + async
#129347 - #[inline(never)] does not work for async functions
#129325 - Overly conservative async capture analysis when values are borrowed
#129105 - Misleading help suggests Sync bound when shareable reference is passed across or into await
#128095 - rustc fails to prove Sendness for an async block where a !Send value is dropped before an .await point
#126551 - Async code causes error "implementation of FnOnce is not general enough" when demanding an impl Send
#126550 - Extremely un-informative error when a future that capture the environment is used as Send
#126482 - Tracking Issue for async drop codegen
#126350 - async_closure: error: implementation of AsyncFnOnce is not general enough
#126044 - Bug when using .flatten() method that has Item = &'a T when calling async function inside loop
#124472 - Universe errors involving an opaque type results in hallucinations and unused bound vars
#123392 - Tracking Issue for context_ext
#123072 - Recursive async functions don't internally implement auto traits
#122332 - recursive async function using Box::new results in cycle error
#121093 - Async callback argument causes nonsensical error message.
#120240 - never patterns: ! argument not detected as diverging on async fn
#119698 - Clarification needed on what happens when Future::poll wakes an old waker
#119095 - ICE with "failed to resolve instance for <... as IntoFuture>::into_future: Ok(None)" (regression between 1.73 and 1.74)
#118959 - Tracking Issue for LocalWaker
#116680 - Non-Send values that are assigned to a variable but not used across an await point incorrectly mark the entire Future as non-Send
#116048 - Changing async function body causes caller to fail
#115327 - Slow compilation of async fn that creates a vector with many Strings created from string literals, even with no .await
#114947 - async fn lifetime eliding satisfies HRTB where explicit does not
#114177 - Weirdness around async function with error "implementation of FnOnce is not general enough"
#114168 - Borrow checker bug when matching select().await with &mut references
#114046 - Higher ranked lifetime error when tryng to see that a future is send.
#113495 - Unclear error when trying to write high-order function accepting an async function that itself takes a reference
#112850 - OOB index in async fn evades linter
#112175 - Unclear error message when using recursive future with tokio::spawn
#111546 - .await does not perform autoref or autoderef
#110339 - "Implementation not general enough" with async and projection, fixed by wrapping with async move
#110338 - Tracking issue for incorrect lifetime bound errors in async
#108906 - async block occupies twice the size of its captures (causing explosion in size).
#108468 - Anonymous lifetimes in impl trait are allowed in async fn, despite being an unstable feature
#108362 - type inference fails when using async_fn_in_trait
#108114 - implied lifetimes lead to mismatched type error with seemingly identical types in the msg - async closure edition
#106765 - #[inline(never)] does not work for async fn
#106527 - [async block]: Future<Output = Ty> obligations don't provide inference guidance
#105822 - ICE: type metadata for unique ID VariantStructType([async block@h3/src/tests/connection.rs:631:22: 646:6], 0, HiddenZst) is already in the TypeMap!
#104382 - async block with futures::stream::Buffered is not Send
#103515 - New example of higher-ranked lifetime error
#102211 - Bogus higher-ranked lifetime error in an async block
#102201 - Give a better error when HRTB require a function to be valid for 'static references
#101135 - -Zdrop-tracking doesn't work if the value is borrowed
#100013 - Unexpected higher-ranked lifetime error in GAT usage
#99492 - Spurious "implementation of FnOnce is not general enough" error
#99279 - “captured variable cannot escape FnMut closure body” diagnostic can be more confusing than the basic “may outlive current function” diagnostic
#98380 - Implementation of FnOnce is not general enough for Flatten iterator of futures outliving an .await point
#97884 - Incomplete error message "future created by async block is not Send"
#96865 - Incorrect "implementation of Send is not general enough" error with lifetimed Send impl used in async fn
#96128 - Closure in async block fails to compile when it should, issues incorrect/misleading diagnostic
#96084 - rebinding values in an async function can double the memory usage
#95521 - debuginfo: identify awaitee (via special name or other solution)
#95055 - Confusing error from an incorrect return; in async block
#92415 - Implementation of trait is not general enough when boxing future returning <T as Foo<'a>>::Foo
#90937 - must_not_suspend should trigger for temporary in match expression (but does not)
#90696 - Problem with GATs, async, and Send-bounds
#90149 - "one type is more general than the other" with async, generics, Send, and lifetime bounds
#89657 - Confusing interaction between associated types, async fn and impl Future
#87425 - implementation of Debug is not general enough when making async block into &dyn Future + Send
#86609 - borrowck error does not suggest missing await
#85417 - Unify lifetime elision for impl Trait arguments between async and non-async functions
#84366 - 'static closures/FnDefs/futures with non-'static return type are unsound
#83783 - Deref coercion does not work for some await returned values
#83310 - Tracking Issue for must_not_suspend lint (RFC #3014)
#83031 - Nested async closures result in exponential compilation time increase
#82921 - Async fn disagrees on its own return type ("one of the expected opaque types" vs "one of the found opaque types")
#82187 - Make async futures Unpin if they don't borrow anything across .awaits
#81653 - Inconsistent move behavior in closure with async block
#81326 - Function works but non-capturing closure with identical signature fails with strange error
#81096 - Poor error message when spawning a future returned by an async fn that takes an owned value as reference
#79648 - Bad Error Message: error[E0277]: the trait bound T: Generator<ResumeTy> is not satisfied
#79024 - Tracking Issue for #![feature(async_iterator)]
#78755 - Deduplicate code that finds the return type of a future
#78649 - error[E0391]: cycle detected when computing type of async fn
#78633 - Variables not always moved into async move block
#78402 - Improve diagnostics for impl Trait capturing lifetimes
#78337 - Incomprehensible type error when defining getter and setter
#78170 - Improve errors for async block in pattern
#76938 - Superfluous errors for missing lifetime in async function argument
#74497 - Unclear lifetime error in closure producing a future
#73524 - External backtraces for async tasks
#73522 - Debugger support for Rust async/await
#71723 - Async function leads to a "more general type" error
#71671 - Why implementation of iterator is not generic enough in async context?
#71407 - Tracking issue for generator code quality
#71368 - Make Option<T> #[must_use] if T is
#71244 - perf slowdown from #70831 (remove a stack frame from .await calls)
#71093 - [codegen] unnecessary panicking branch in foo().await (vs equivalent FutureImpl.await)
#71072 - rustc should suggest using async version of Mutex
#70098 - no_mangle causes compilation errors with async-await on armv7-linux-androideabi and aarch64-linux-android targets
#69826 - Tracking Issue for Coroutine Memory Usage
#69781 - It is hard to see the return types of async functions
#69663 - Tracking issue for more precise coroutine captures
#68604 - E0700 does not point to where the captured lifetime is
#68521 - "expected bound lifetime parameter, found concrete lifetime" when passing a 'static reference to a closure that returns a future
#66709 - std::future: Document that each Future (Stream, etc) must only be used by one task at a time
#66634 - Error in async function/block produces errors for valid unrelated expressions
#66445 - Too many type inside async object must be known in this context errors
#66281 - Waker::will_wake() gets mostly defeated by executor optimizations
#66168 - async fn unmet lifetime constraints produce confusing diagnostics
#65677 - Document auto traits implemented by RPITs / ret tys of async fns
#65442 - Closure-like blocks capture all generic type and const parameters
#64650 - Unhelpful error "one type is more general than the other" in async code
#64552 - Lifetime bounds in auto trait impls prevent trait from being implemented on generators
#64286 - EXPERIMENT: Make async fn, .await, async move? { legal on 2015
#63818 - Resolve unsound interaction between noalias and self-referential data (incl. generators, async fn)
#63768 - The rules for how non-Send local variables "infect" an async function, making its Future type non-Send also, are stricter than they need to be.
#63647 - inline attribute on async fn doesn't work properly
#63502 - Error "cannot infer type" when using '?' in async block + bad diagnostic
#62958 - Async fn doubles argument size
#62391 - Pin docs should mention pitfalls of generic code
#62290 - Tracking issue for #![feature(async_closure)] (RFC 2394 / RFC 3668)
#62284 - Mutually recursive async fns are hard to make Send
#60661 - HIR printing of async fn is broken
#60658 - Wrong Send constraint when using a trait with lifetime + associated type in async
#59087 - Generator size: borrowed variables are assumed live across following yield points
#58816 - It'd be useful to delay E0412 after type checking to improve suggestions
#161495 - [ICE] Unexpected rigid alias in layout_of after normalization
#159495 - Suggest making fn async if future found in return expr
#159427 - 1.98 beta regression: "queries overflow the depth limit!"
#157040 - [ICE]: rustdoc unexpected async fn return type
#156903 - [ICE]: "explicit deref of non-derefable type"
#155880 - coroutine higher-ranked auto trait errors should point at the definition whose bound vars are part of the error
#155636 - Incorrect closure signature in diagnostic when passing normal closure to AsyncFn argument
#154496 - Miscompilation in async (SIGILL)
#152735 - Miscompilation causing segfault with dyn Future on recent nightly versions
#152203 - Incorrect (?) "implementation of FnOnce is not general enough" error
#150378 - ICE: broken MIR Unsize coercion in "runtime-optimized" phase (async block !Sync to Sync trait object)
#148391 - Diagnostics incorrectly states that async closure implements Fn.
#147976 - regression: queries overflowed the depth limit
#147967 - regression: overflow evaluating the requirement
#147244 - Regression in nightly-2025-07-19: implementation of FnOnce is not general enough
#146055 - [FEATURE REQUEST] Waker::from_fn_ptr
#144155 - Coroutine upvars are not required to be live in borrowck if witness has no drop requirements
#142572 - segmentation fault when using async_drop feature
#140493 - async-drop-initial.rs test failing on Fuchsia
#140469 - ICE:called Option::unwrap() on a None value
#140265 - Poor suggestion for async || {} in place of async {}
#139829 - async functions do not compile correctly for WASM
#138274 - [bug] When I Use tauri-plugin-http and reqwest either, I got a panic
#137781 - Adding Self: Sized alters AsyncFnOnce bounds
#137721 - False positives of local variables crossing await scopes.
#136349 - Potentially misleading error when holding a reference into a guard across await point
#133596 - Tracking issue for release notes of #132706: Stabilize async closures (RFC 3668)
#133529 - Edition 2024 now reports: argument requires that '1 must outlive 'static
#133385 - Tracking issue for release notes of #132611: Add AsyncFn* to to the prelude in all editions
#132573 - Tracking issue for release notes of #129347: #[inline(never)] does not work for async functions
#132103 - ICE: Building async destructor constructor shim is not yet implemented for type: Coroutine
#131190 - ICE: index out of bounds, instrument coverage
#129865 - async code fails to compile with -Znext-solver
#128920 - Happens-before relationship between wake and poll
#125737 - Unhelpful error on mismatched types for anonymous futures
#125431 - Poor interaction between NLL-borrowck, async, and c_variadic's ... desugaring (VaListImpl<'_>)
#124973 - ICE: unexpected region for note_and_explain_region: '?9
#124757 - Weird type inference around impl Trait and async
#123901 - ICE: leftover child captures?
#123717 - Strange error message when trying to call a function that takes a closure that returns a future
#123341 - Incorrect line table generation for await points
#123251 - Unexpected initial operand type with async closures and FnOnce
#123241 - Async closures are not allowed to reference all captured lifetimes if one of them is invariant
#123334 - internal compiler error when copying borrow of leaked Box into async move closure for FutureExt::then
#120503 - ICE: ConstContext::Maybe must have host effect param during mir_const_qualif
#120442 - Value is incorrectly considered to be borrowed accross await points
#119890 - ice: async fn coroutine return type not an inference variable
#119727 - Cycle detected in async fn but not with -> impl Future
#118604 - rustc cannot infer Send for async block consistently with drop and braces
#117233 - Multiple spurious async related errors when encountering single parse error
#116982 - rustc reports misc message with impl conflict of trait with AFIT and assoc type.
#116242 - Code no longer compiles after -Zdrop-tracking-mir was enabled by default
#115760 - cargo doc: shows different return types for re-exported methods
#114912 - debug ice: attempted to add with overflow
#114624 - async function being !Send due to match retaining type of a consumed value.
#113796 - AFIT no longer seems to play nice with lifetime GATs
#113538 - [BUG] Stable (warning): Async traits Self return requires type specification
#112569 - async_fn_in_trait and return_type_notation cause awkward awaits
#112456 - ICE: "forcing query with already existing DepNode" with many async calls
#112225 - 1.70.0: Type inference no longer works in conjunction with Glib's clone macro
#112054 - ICE: type_op_normalize_ty: forcing query with already existing DepNode
#112010 - error where expected and found future are the same
#111852 - error: X does not live long enough doesn't provide enough context
#111458 - New #[must_use] behaviour for async methods does not apply to Pin<Box<dyn Future<Output = ()>>>
#110156 - impl_trait_projections incorrectly triggers on async inherent method
#109931 - Rustdoc lists empty opaque type for async fn
#109016 - return_position_impl_trait_in_trait lifetimes on self
#108304 - Fix RPIT in default async trait method
#107899 - improving error message when returning an opaque type inside an if else block
#107513 - Tests compilation fails with "Undefined symbols for architecture x86_64"
#106688 - Mut borrow persists after await
#106049 - Errors with join and spawn
#105134 - async{} blocks can no longer be used in functions marked as #[track_caller]
#104883 - Future non-Send although non-Send local is dropped before .await
#103854 - Do we need Send bounds to stabilize async_fn_in_trait?
#102918 - resolve the function call on an async trait cause a compiler crash
#102423 - if let expression extends the lifetime of trailing variables in BlockExpression too much
#102383 - Drop tracking ICE involving await in left hand side of assignment (-Zdrop-tracking)
#102012 - Tracking Issue for const_waker
#101444 - Semantics of control flow operators (return, continue, ?) in async blocks is severely underdocumented
#100755 - Unclear error message on async closure
#100406 - async blocks can't forward references
#99190 - async fn doesn't compile if it includes at least two generic lifetimes and at least one 'static lifetime
#99104 - Holding a non-Send Copy type across a yield should be allowed
#98997 - False-positive "temporary dropped while borrowed" involving return-position impl Trait
#98477 - drop-tracking: type parameters are incorrectly required to be Send to make futures Send
#98476 - drop-tracking: ICE when using default struct update syntax
#98077 - Variable lifetime is wrongly tracked in async fn
#97331 - Tracking issue for enabling -Zdrop-tracking by default
#96992 - Tracking Issue for waker_getters
#96771 - Hidden type for impl Trait captures lifetime that does not appear in bounds
#95719 - Unexpected "the parameter type X may not live long enough" error in asynchronous functions
#95412 - Confusing extension of lifetime of reference causes lack of Send in Future
#95404 - Confusing error message with borrows and dyn Error
#95182 - Ambiguous output when higher rank trait bound is not met
#95034 - ICE on "computing whether GenFuture<_> is Copy"
#94944 - Improve error message when trying to use ? in an async block that does not return a FromResidual type
#94843 - Additional let bindings needed to avoid Sync
#94463 - generator_interior should be refactored to use ExprUseVisitor
#93674 - Drop tracking misses variables consumed in let statements
#93648 - Drop tracking ignores borrows with projections
#93274 - Regression in async generator and fmt internals: loss of Send
#93093 - Incorrect suggestion when trying to write to an immutable field in an async function
#92308 - Better error message for missing return in async fns
#91463 - Duplicate error messages in async code
#89798 - Feature gate the must_not_suspend lint
#89780 - Tracking Issue for poll.ready()?
#89562 - New must_not_suspend lint triggers even when value has been moved
#88171 - ICE: Broken MIR: generator contains type Vec<[u8; 16]> in MIR, but typeck only knows about X, Y, Z
#88125 - Encountered spurious Does not need to be mutable warning
#87613 - Strange async use ...; compiler suggestion
#87309 - Moved value is considered as held across an await in async fn
#87211 - Confusing error: Immutable reference to future is not a future
#87021 - Feature: Provide getters of data and vtable pointer for RawWaker?
#86615 - False positive unused_lifetimes warning with an async fn
#86507 - suggestion that &T requires Sync to be Send could be clearer
#86487 - confusing "lifetime mismatch" error when spawning task
#85132 - Wrongly typing a collect with async streams causes confusing error messages alongside a cascade of unhelpful error messages
#84841 - Internal compiler error with async, const generics, and ?-operator
#84737 - Broken MIR with const_generics and async/await
#84292 - unused_assignments false positive in async blocks
#84166 - improve error for missing await
#83499 - ICE: panicked at 'index out of bounds: the len is 2 but the index is 2', compiler/rustc_mir/src/borrow_check/type_check/input_output.rs:76:32
#82470 - ICE with async_trait
#81907 - Suggest async_recursion crate when writing a recursive async fn
#81457 - Diagnostic involving the type of an async block refers to generator's
#81000 - Regression: missing MIR for generic async fn across crates
#80998 - ICE in github build
#80706 - ICE(stable): thread 'rustc' panicked at 'called Option::unwrap() on a None value', compiler/rustc_middle/src/ty/instance.rs:434:85
#80658 - Note when opaque future from async fn is involved in a type mismatch is unclear
#80004 - async and other Rust 2018+ keywords not recognized as so in Rustdoc highlighting
#79843 - "introduce a type parameter with a trait bound instead of using impl Trait" diagnostic is malformed for async fns where the previous parameter is a borrow
#79694 - Unclear compiler output for move async -> async move
#79146 - ICE with higher-order trait-bounds (AsyncFnOnce emulation)
#79144 - ICE with async + HRTB + Closures
#78938 - Explain why borrows can't be held across yield point in async blocks/functions
#78840 - #[track_caller] does nothing on async fns
#78654 - ICE: compiler/rustc_typeck/src/check/closure.rs:608:18: async fn generator return type not an inference variable
#78600 - Improve error message for "return type cannot contain a projection or Self..."
#78543 - Bad diagnostic for Send bound on Future coming from async fn in foreign crate
#78522 - Bad interaction of async functions with unused_lifetimes lint
#78366 - ICE when using Matching, Async and Indexing
#78149 - #[must_use] on async fns works on returned Future instead of the awaited value
#78125 - Severe memory leak in Rustc
#78115 - ICE: variable should be placed in scope earlier
#77880 - Unhelpful "cannot infer type" error for ? in async block with unclear Result Err type
#77628 - Compiler runs out of memory in nested async/await calls since 1.46
#77533 - rustdoc shows __arg0 for mutable parameter to async function
#77361 - async blocks in a const-context error on nightly, but not on stable
#77217 - False positive unused_lifetimes warning
#77175 - False positive: single_use_lifetimes
#76609 - Unclear diagnostics for async callback that takes a reference
#76550 - Odd Lifetime error when compiling async fn with two non-static and one static reference
#76547 - async fn can't handle multiple lifetimes in a slice of slices
#76517 - rustdoc renames parameters with mut in async fn
#76249 - Unstable (de facto internal) library feature gen_future links to a closed tracking issue (for async/await)
#76168 - ICE: cannot convert RePlaceholder to a region vid
#76011 - Suggest async {} for async || {}
#75992 - Increasingly slow compilation as more levels of async are added in Rust 1.46
#75977 - ICE assertion failed: self.is_struct() || self.is_union()
#75808 - Potential compiler memory leak in Nightly
#75785 - Lifetime error points to wrong reference in async fn return
#74961 - src\librustc_mir\transform\generator.rs:739:13: Broken MIR: generator contains type &rocket::http::Cookie in MIR, but typeck only knows about for...
#74906 - Async/.await and const-generics causes "Broken MIR:"
#74779 - Backtraces shouldn't show stack frames generated by the implementation of async-await
#74256 - E0623 highlights wrong parameter in async fn
#74115 - Confusing error message for async move in the 2015 edition
#74072 - Error message in async fn refers to lifetime '1 without defining it
#74047 - ICE on improperly implemented TryFrom
#73914 - Broken MIR in async fn generation
#73741 - Type error in async function causes spurious "type must be known in this context" error
#73737 - Typecheck error in body of async fn reported at point-of-use
#73625 - Boxed recursive function should not require trait object
#73624 - Boxed recursive async function is forbidden unless a let-binding is used
#73541 - ICE "no enclosing breakable scope found" when using continue with a label in a macro in a different loop inside an async block
#73417 - Extend #[must_use] to more types
#73050 - ICE: src/librustc_typeck/check/generator_interior.rs:204: impossible case reached
#73002 - Clarify the behavior of std::task::Waker and Future::Poll
#72992 - Tracking Issue for poll_ready
#72956 - Indexing via index method and [idx] sugar works differently in async blocks/functions
#72837 - Compiling simple (but long) code with lots of async/await takes hours
#72766 - Missing .await causes ICE / StableHasher: unexpected region '_#2r
#72685 - Impossible case reached: src/librustc_ty/needs_drop.rs:111
#72590 - Unhelpful error message for async method on invalid type
#72470 - LLVM error: "Instruction does not dominate all uses!" on Windows
#72454 - Simple async wrapper doubles the size of a future
#72651 - ICE: Broken MIR
#72426 - Compiler Error: 'rustc' panicked at 'Box<Any>' (w/ async closures)
#72312 - Unhelpful compiler message when a reference is used inside of an await block
#72302 - Tracking Issue for feature future_poll_fn
#72247 - Stack space in async closures is not shared between branches in debug builds
#72117 - confusing diagnostic for incorrect type parameter on BoxFuture
#72095 - thread 'rustc' panicked at 'no label after fn', src/libcore/option.rs:1188:5
#71811 - rustc doesn't suggest missing .await before a ?
#71686 - Diagnostics request: suggest a closure with an async block when an async closure is encountered
#71222 - Tiny difference of the diagnostics for generator on some environment
#71137 - Improve await error messaging for trait obligations
#71010 - Bad error message using shared borrow of non-sync type across await point
#70935 - Hard to read error message with 2D line drawing and multi-line expressions
#70922 - Tracking Issue for core::task::ready! macro
#70921 - Tracking Issue for future readiness functions
#70905 - ICE on generators + arrays
#70818 - note_obligation_cause reporting for non-async/await not optimal
#70736 - internal compiler error: local_def_id: no entry for HirId { owner ...
#70594 - internal compiler error: no type for local variable
#70488 - Async performance regression
#69938 - incorrect error message for duplicate Send impl
#69912 - Tracking Issue for the Wake trait
#69785 - ICE in collect_and_partition_mono_items
#69672 - x = yield; makes generators larger than they need to be
#69632 - Overlapping From impls produce confusing errors in async code
#69446 - Which captured variable cannot escape FnMut closure body?
#69431 - Tracking Issue for async blocks in const fn
#69355 - Unexpected panic in rustc with async_stream
#69307 - ICE: src/librustc/middle/region.rs:1037: Encountered greater count 28
#69298 - Move keyword page makes no mention of async blocks
#69276 - Improve error message for "return type cannot contain a projection or Self..."
#69083 - Detect cases where Box::pin was likely intended
#68950 - Strange borrowing issue in inherent async method.
#68864 - 25% compile time increase on beta when building async-std
#68759 - Async await mulitple lifetimes issue with Box
#68543 - Unsized locals and async ICE
#68523 - Bad error message with async main
#68477 - ICE cause by tokio::spawn a async function return future opaque type
#68430 - Rustc doesn't report line numbers for type errors within proc macro async fn within macro_rules macro
#68197 - Confusing error message when expecting BoxFuture
#68119 - Error message for closure with async block needs improvement
#68112 - Explanation for why future is not Send is wrong
#68109 - rustc panics when compiling code that uses tokio's LocalSet
#67982 - Re-land "add IntoFuture trait and support for await"
#67893 - rustc compiler crashed when using async in loop
#67832 - ICE in nightly when using trying to preserve rand::rngs::ThreadRng across awaits
#67778 - async fn ICEs in macro on stable
#67765 - Unhelpful error messages from borrow checker with async/await
#67757 - Nightly 2019-12-29 causes reached the type-length limit error in previously working code
#67706 - Major async/await compiler performance regression
#67651 - Confusing/incorrect error message with incoherent implementations and async blocks
#67644 - Tracking issue for IntoFuture
#67611 - not Send due to await retainment
#67376 - improve diagnostics for non-send Futures that might be solved by introducing temporary variables
#67204 - Explain editions when trying to use async block in 2015 edition
#67200 - rustc panic from unwrapping None
#67158 - ICE on beta and nightly as result of use of yield in combination with macro call in async block
#67087 - ICE while compiling async/await code
#67036 - Unexpected interactions with async blocks, auto traits, and trait objects
#67025 - Reduce type errors in async fns
#66958 - ICE on rustc 1.41.0-nightly (25d8a9494 2019-11-29) running on x86_64-apple-darwin
#66910 - Slightly incorrect help message with mismatched typs in async code
#66909 - async-await keywords are not documented in the libstd docs
#66814 - Incremental compilation breaks trait objects in async fns
#66731 - More friendly error msg when await on NONE ASYNC fn/block or return a obj that implements deprecated Future
#66695 - Broken MIR after compiler update when indexing statics with async values
#66618 - ICE on 1.39.0 stable with combination of async and ..
#66481 - Context and Waker might be accidentally Sync
#66444 - Show the location of a type usage for trait bound failures
#66440 - Confusing error message on variables created on the fly and passed to an async fn
#66387 - Compiler crash on "if" without "else" in async fn
#66312 - async fn presence affects an unrelated error message
#66198 - Borrowing from arguments with higher order async functions
#66107 - async-block diagnostics do not suggest async move when it may be needed
#66100 - [codegen] Unnecessary panicking branches in resumption of infinite generator (stored in static variable)
#65978 - Symbols in optimized async programs are often not useful
#65923 - Unhelpful error message when awaiting an async closure while forgetting the brackets
#65899 - Add more context when trying to write async trait function
#65667 - Async/Await: Confusing error message when using non-Send type in async fn
#65436 - async/await regression regarding borrows across yields
#65419 - Attempting to run an async fn after completion mentions generators
#65409 - Suggest as_mut to reborrow Pin when calling method
#65180 - Async-related type error messages defy expectations (in span location)
#65159 - Nightly async fn ICE
#65147 - check_mod_item_types query times regressed bigly
#64960 - Cannot await in scope that contains call to format!
#64853 - Should async/await be strict keywords?
#64692 - No error for private type in public async fn
#64636 - async functions with unimplemented!() are marked as unreachable
#64630 - Async struct method, <_'> lifetime shadowing
#64512 - async fn drop order for temporaries in return expression does not match sync
#64496 - reached the type-length limit while instantiating std::thread::LocalKey::<std::syn...e, ()}]>>]], std::vec::Vec<i32>>
#64493 - Spurious "unused lifetime parameter" warning with async function
#64477 - Spurious new Send requirement in async block
#64433 - Lifetime errors on nightly-2019-09-11 but not nightly-2019-09-10
#64392 - Async function return type inference fails without an ending return
#64391 - async functions fail to move values into generated futures in the latest nightly
#64382 - Consider async blocks on lifetime errors
#64176 - Lifetime error when Send is enforced on async function return type
#64130 - non-send futures error at point of use, but could cite point of definition in some cases
#64004 - async-await: mutually recursive functions compile sometimes
#63832 - temporary lifetime around await is (maybe) unexpectedly short
#63778 - Temporary values do not outlive a direct await
#63716 - [bug] async specialization is not parsed
#63710 - rustdoc renders re-exported async fns incorrectly
#63616 - Handle partial initialization correctly in generators
#63533 - Improve error message for .await in 2015 edition
#63526 - Include type bindings on string representation of impl Trait
#63514 - Tracking issue for map_ok and map_err method for Poll<Option<Result<T, E>>>
#63500 - async fn methods and impl '_ elision do not interact correctly
#63398 - Wrong block referenced when emitting E0728
#63391 - Improve diagnostic for break in async { ... } block
#63388 - &self lifetime elision with two parameters does not work with async fn
#63385 - Unhelpful error message with async usage of Iterator
#63277 - Different error messages between async and regular functions
#63225 - Error with nested async fn and anonymous lifetimes
#63167 - Confusing error message with type unification of impl Traits
#63100 - "Try invoking the function" hint
#63033 - Async fn does not compile if lifetime does not appear in bounds (sometimes)
#63032 - Lifetime is unnecessarily captured in nested functions returning impl trait via async
#62918 - Remove TLS dependency from async/await
#62658 - ICE: assertion failed: (left == right) in type_of.rs
#62572 - Pretty-printing support for Rust generators
#62570 - Async blocks are leaky about wording wrt. ? in diagnostics
#62566 - include material on async fn in the Rust reference
#62539 - diagnostic for naive recursive async functions is really unfriendly
#62517 - async fn with elided lifetime causes rustc panic
#62506 - ICE on generator type check with a must_use type
#62501 - Tracking issue for #!feature(async_unsafe)] (RFC 2394)
#62500 - move async unsafe fn to distinct feature gate
#62386 - Invalid suggestion when attempting to call async closure
#62382 - Unhelpful span in async type inference error
#62312 - Future compat warning with .awaiting a BoxFuture
#62236 - Move tests in src/test/run-pass/async-await -> src/test/ui/async-await
#62232 - Inconsistent syntax between unsafe async fn and async fn unsafe
#62214 - Split the async_await feature gate for the subset we want to stabilize
#62149 - [Stabilization] async/await MVP
#62121 - increase test coverage for async-await
#62097 - rustc suggests invalid syntax to fix lifetime inferring error
#62087 - Async/Await rustc assertion panic
#62028 - thread 'rustc' panicked at 'assertion failed: target_offset >= offset'
#62025 - Broken MIR: generator contains type std::vec::Vec<()>
#62009 - ICE when playing with async/await.
#61991 - Can't infer type after collecting an iterator of futures
#61986 - ICE compiling with futures compat
#61950 - Async function using non-across-yield non-Send value is Send only if the usage is inside curly brackets
#61949 - Inherent async fn returning Self treats type's lifetime parameters as 'static
#61920 - E0373 help suggests move async but the correct syntax is async move
#61910 - error: internal compiler error: broken MIR in DefId ...
#61906 - Since rust is not going in CPS style coroutine, where is the context carrier for async?
#61834 - Broken MIR: generator contains type impl std::future::Future in MIR, but typeck only knows about {impl std::future::Future, ()}
#61798 - unreachable_code warning when invoke .await on async diverging function
#61793 - Codegen ICE/regression with 2019-06-12 nightly when using async fn<T: Fn()>(&self, T)
#61770 - Broken MIR: generator contains type
#61731 - "Broken MIR" ICE when using runtime crate
#61685 - Rustc paniced when apply .await on a closure in a non-async function
#61664 - compiler panicked at 'Box<Any>'
#61579 - ICE: Broken MIR in generators
#61482 - A rustc-internal compile error on future and task API
#61452 - [ICE] async fn vs lint order
#61442 - Broken MIR in futures generator (async/await)
#61335 - ICE when combining unsized locals and async
#61211 - async/await borrows more around await points than necessary
#61187 - Internal compiler error in nightly when reversing a vector inside a async fn
#61115 - unused-lifetimes lint false-positives with async functions
#61076 - suggest await for future-related type errors
#61072 - async fn + rustfmt don't "just work" inside of RLS
#60889 - Don't ignore generator fields in miri
#60797 - improve the "must use" lint for Future to suggest await
#60709 - future miscompiling to ud2
#60674 - Async fn loses mut pattern when passed to attribute macro
#60660 - std::r#await! macro cannot be used even if #![feature(await_macro)] is enabled
#60655 - existential type complains about '_ in concrete type of self-borrowing generators
#60653 - Make the parser aware of await where macro calls are expected
#60645 - Are blanket Future impls necessary?
#60615 - async/await unresolved type parameter in generator error shouldn't refer to yield
#60613 - Provide appropriate suggestions for some of the discussed await syntaxes
#60610 - Remove await! macro-like syntax support
#60589 - Is async/await compatible with io_uring (Linux async io)?
#60566 - async fn raises unused_mut on parameter that is used mutably
#60518 - ICE with the newest nightly in lower_ty_direct
#60509 - Extend async fn test suite to account for ref mut? patterns
#60498 - async fn forgets the mutability of the arguments
#60438 - __arg variables from async fn desugaring are accessible to the user
#60424 - type inference doesn't work in async fn that return Box<dyn SomeTrait>
#60418 - Move async/await UI tests into a folder
#60414 - Using associated types in async fn type break typing
#60236 - Drop order of async fn arguments doesn't exactly match the equivalent regular fn.
#60203 - Async fns that take structs with elided lifetime parameters are broken.
#60069 - Can define and use async fn without feature gate on nightly
#60016 - Implement await syntax
#59972 - Futures involving uninhabited variables are incorrectly considered uninhabited.
#59971 - async/await: cannot move out of captured variable in an Fn closure
#59337 - closures with async blocks have concrete argument lifetimes
#59313 - async move breaks doc tests
#59245 - Inconsistency in Send/Sync requirements for async/await
#59123 - Generator size: unwinding and drops force extra generator state allocation
#59113 - Tracking issue for RFC 2592, futures_api
#59001 - async: hidden type for impl Trait captures lifetime that does not appear in bounds
#58945 - internal compiler error: Trying to create type name for unexpected type [debuginfo]
#58930 - async/await produces unspecific "type inside generator must be known in this context" error messages
#58888 - ICE unexpected type in type_metadata: impl core::future::future::Future
#58885 - async/await: Usage of trait objects reports multiple different lifetimes when only one is used
#58884 - async/await: Potentially incorrect lifetime handling when structs with lifetimes are referenced
#58814 - Playing with async triggers compiler bug "TLS Waker not set"
#58652 - async fn should be disallowed entirely on 2015 edition
#58639 - expected signature of `for<'r, 's> fn(&'r mut std::task::Context<'s>)
#58027 - Rustdoc renders async fn incorrectly
#57640 - Resolve await syntax
#57478 - Dropped variables still included in generator type
#57084 - ICE(async_await,futures_api,await_macro,generators): cannot relate bound region: ReLateBound(DebruijnIndex(1), BrAnon(2)) <= '_#1r
#57036 - async/await: Sending Waker seems to invalidate it
#57017 - async/await: awaiting inside a match block captures borrow too eagerly
#56974 - Cannot define async fn with no_std
#56767 - await macro is not in libcore.
#56651 - Obscure compiler panic with async/await
#56238 - async fn should support multiple lifetimes
#55809 - Mixing async functions and &mut leads to overflow evaluating requirement
#55324 - async fn doesn't capture lifetimes of type parameters if other lifetimes are present
#54974 - async fn: 'static lifetime not inferred for Arc trait object
#54716 - Unused arguments to async fn are dropped too early
#54326 - Mismatched types diagnostic for async fn return type trusts random returns over function signature
#54289 - ICE with async_await + extern crate + invalid import
#54239 - Using await on an internal future makes private type trigger missing_debug_implementations lint
#53989 - compile async await function error
#53714 - async fn inside inherent impl produces generic parse error on 2015 edition
#53548 - async/await: “the requirement for<'r> 'r : 'static is not satisfied” with 'static across await point
#53447 - ICE with --pretty=expanded and async/await
#53259 - Missing detection of Send for async fn
#53249 - async/await assertion failed: unbounded recursion
#52924 - Generators are too big
#51995 - ICE in generator MIR generated by async/await
#51933 - async fn inside fn fails to parse
#51932 - Weird async/await error message around mutablility
#51751 - async/await errors should not discuss "yield statements"
#51353 - 'assertion failed: current_depth > ty::DebruijnIndex::INNERMOST' when using generators
#50659 - Suggestion for E0627's message
#50547 - Tracking issue for async/await (RFC 2394)
#50458 - Implement DerefAsync and DerefMutAsync as Deref and DerefMut in async context
std::task and std::future
stabilized in 1.36
[in stable]
/
RFC 2592
/
#59113
Pin APIs
stabilized in 1.33
[in stable]
/
RFC 2349
/
#49150
Pin as a method receiver
stabilized in 1.33
[in stable]
/
RFC 2362
/
#55786
2018 edition
stabilized in 1.31
[in stable]
async as a keyword in 2018 edition
stabilized in 1.28
[in stable]
impl Trait in return position
stabilized in 1.26
[in stable]
/
RFC 1522
/
#34511
Related issues under A-impl-trait
#161816 - -Znext-solver: TAIT hidden closure type recorded twice with different parent regions ("concrete type differs from previous defining opaque type use")
#161038 - Unsoundness in Polonius involving impl Trait
#160979 - A possible regression with -Zpolonius=next
#159708 - Send bound not inferred on RPIT due to nonsensical unsatisfied higher ranked bound
#159481 - Suggest impl Fn() in return type when trying to return a closure coerced to fn() pointer
#158777 - Auto traits in opaque types impose bounds on wrong lifetime
#156178 - Can't override trait method with RPITIT if there's an unconstrained lifetime parameter.
#155538 - Post-mono cycle ICE with dyn and RPIT
#155430 - Implementation of trait function returning GAT can't use same signature as trait definition
#155151 - Field within opaque type is not captured by closure under old solver
#154868 - Failure to match identical impl Trait type signatures when using redundant trait bounds
#153607 - Recursive RPIT incorrectly errors: "concrete type differs from previous defining opaque type use"
#153597 - Lifetime annotation not respected in recursive function with RPIT
#153575 - Opaque Type (impl Trait) leaks Unpin auto-trait from internal implementation
#153535 - TAIT + next-solver will allow constructing a unit struct without mentioning its type, causing pinned-init to be unsound.
#152775 - Conditional borrow with RPIT
#152742 - [ICE]: "unexpected ambiguity" due to recursive RPIT
#151906 - "missing optimized MIR" due to privacy violation, via associated type equality constraint in TAIT
#151861 - impl Trait and bounds on associated types can produce values that mention invalid lifetimes
#151433 - Compiler allows marker trait bounds to be omitted in implementations when using RPITIT
#150418 - RPITIT implementation requires bounds inconsistently
#149765 - TAIT: requires bounds on type alias when shouldn't
#149438 - Maybe-sized RPIT type is unexpectedly allowed in async fn
#149078 - Order-dependent LUB coercion under next solver involving TAIT & NeverToAny
#148511 - Internal Compiler Error
#148401 - RPIT can't capture LUB of two lifetimes
#147927 - rustdoc-json: show leaked auto-trait definition for RPIT and async-fn
#146607 - impl Trait missed bound should hint if underlying type could satisfy the bound
#146371 - "unexpected ambiguity: CanonicalQueryInput" with conflicting associated type specifiers
#146231 - -Znext-solver ambiguous opaque types in HIR typeck result in poor errors
#146062 - member constraints involving external regions are scuffed
#142073 - apply_member_constraints is incomplete
#141047 - refining_impl_trait: The suggested fix does not yet take precise capturing into account.
#140569 - member constraints are order-dependent
#140517 - RPIT(IT)s "leak" internal implementation details of lifetime capturing via boundedness
#139788 - opaque type leakage and RPITIT normalization
#139658 - cargo check works fine, but cargo build gives "overflow evaluating the requirement "
#139446 - ICE: stack overflow with -Ztyping-mode-borrowck in inference
#139406 - Strange type inference for recursive RPIT
#139350 - Recursive RPIT causes E0792 (an error about TAIT): "this generic parameter must be used with a generic type parameter"
#138530 - impl Fn(T) argument type is not infered from return type
#137636 - Polynomial slowdown in impl Trait composition
#136062 - Confusing error message when returning impl Trait where the concrete type contains itself.
#135619 - Inconsistent lifetime inference with return impl Future/BoxFuture and higher ranked lifetimes
#135453 - rustdoc: Consider eliminating edition sensitivity around RPIT capturing
#135152 - "This generic parameter must be used with a generic lifetime parameter" on RPIT with precise capturing
#135144 - Precise captures in ITIAT behave differently than refined RPITITs and TAITs
#135006 - RPIT associated type lifetime bound is ignored
#134838 - ICE while trying to field project out of opaque value by utilizing type ascription
#134578 - auto trait leakage can be used to leak arbitrary types
#134311 - Hidden type of "discarded" and thus unconstrained RPIT(IT) opaque types gets inferred to be the unit type ()
#133943 - Incorrect diagnostic error[E0309]: the parameter type T may not live long enough, suggests duplicate bound
#133314 - Unexpected error when resolving bounds involving associated types
#132212 - Syntactically rejecting impl-Trait inside non-final path segments & inside fn ptr types is futile
#130935 - Outlives requirements are not implied in the return type of async fn, and generally for RPIT
#130113 - Bogus "implementation of <whatever trait you want> is not general enough" with RPITIT + async
#128752 - RPITIT "captures lifetime that does not appear in bounds"
#127329 - Middle/pretty: Butchered output for opaque types with associated type bounds
#124898 - stack overflow in rustc_ty_utils::opaque_types::OpaqueTypeCollector as rustc_type_ir::visit::TypeVisitor<rustc_middle::ty::context::TyCtxt>>::visit_ty::{closure#0}
#124472 - Universe errors involving an opaque type results in hallucinations and unused bound vars
#122163 - Confusing diagnostics when using RPIT in Fn return type
#119786 - ICE: None in compiler/rustc_mir_build/src/build/matches/mod.rs
#118116 - Closures needlessly capture all generic parameters from parent item in TAIT
#117866 - Decision on "must define before use" for opaque types
#117865 - TAIT decision on "may not define may guide inference"
#117392 - ICE: failure to relate an opaque to itself should result in an error later on
#117210 - return_position_impl_trait_in_trait can not express static lifetime bound
#116652 - go through uses of DefineOpaqueTypes::No and either document or change them
#116246 - Inference issue with impl IntoIterator
#115421 - Inconsistent "captures lifetime" behavior between fn and impl Fn
#115017 - opaque type needlessly inferred to be recursive
#113596 - TAIT: typed patterns don't count as defining uses
#113581 - Explain how to fix “no field on type” on a TAIT / ATPIT typed value
#112905 - Rust allows impl Fn(T<'a>) -> T<'b> to be : 'static, which is unsound
#112417 - unchecked region constraints for opaque types in dead code
#110925 - RPIT type parameters not checked for well-formedness
#109387 - alias bound candidates for opaques allow cyclic reasoning
#108468 - Anonymous lifetimes in impl trait are allowed in async fn, despite being an unstable feature
#108362 - type inference fails when using async_fn_in_trait
#106684 - Associated type with a 'static bound still captures lifetimes when using impl Trait.
#106490 - Rust compiler or LLVM fails to generate branch-free code
#104343 - "computing type of ...::{opaque#0}" query cycle in async fn w/ auto trait obligations.
#102527 - Exponential compile times for chained RPITIT
#100372 - closures/async blocks capture all lifetimes in scope
#97686 - bad diagnostic on using impl Trait in recursive function
#96406 - TAIT: hidden type cannot be another opaque type from the same scope
#96146 - higher ranked lifetimes not recognized by type alias impl trait
#93327 - impl trait error does not explain its reasoning
#92641 - bad rustdoc ux: trait method implementations have their docstrings ommitted in the "implementors" section
#92281 - Higher-Rank Trait Bounds: incorrect (or misleading) diagnostic
#86488 - E0277 missing context on impl Trait argument not satisfying a trait bound introduced by method call
#85417 - Unify lifetime elision for impl Trait arguments between async and non-async functions
#80083 - Impl Trait forces unnecessary lifetime bounds
#78403 - Recursive instantiation for Iterator trait with closure-taking adaptors hangs rustc
#78402 - Improve diagnostics for impl Trait capturing lifetimes
#78258 - Incoherent error when a method and the containing impl require the same trait with different lifetimes
#76410 - Nested impl Trait for higher-order functions
#69882 - todo! and unimplemented! does not work with impl Trait return types
#69112 - Conflicting error messages for HRTB in impl Trait
#68064 - Type inference can't resolve type of output of dyn Future inside of impl Fn inside of Vec
#66551 - impl Trait cannot work well with lifetime bounds
#65805 - impl Trait does not capture lifetime of generic argument
#65677 - Document auto traits implemented by RPITs / ret tys of async fns
#65442 - Closure-like blocks capture all generic type and const parameters
#64548 - Incorrect compiler hint for complicated type handler
#63066 - Meta tracking issue for impl Trait
#63065 - Tracking issue for impl Trait in const and static items and let bindings
#63063 - Tracking issue for RFC 2515, "Permit impl Trait in type aliases"
#62223 - Can't use impl Fn to return a closure that returns another closure
#61756 - impl Trait with multiple lifetimes imposes a strange lifetime requirement
#60725 - Compiling is signification slower with long return position impl types
#60249 - Compiler fails to identify type mismatch on function that returns impl Trait
#57961 - Defining scope of existential type defined by associated type
#56711 - Recursive call passes cargo check but fails with cargo build
#55535 - "does not live long enough" when returning Option<impl trait>
#54729 - Wrong type inference for closure with impl Trait inside another type
#54385 - impl Trait should be able to capture long-lived associated types even if the trait contains a lifetime
#51616 - Wrong lifetime is inferred in the argument of closure when given more specific type.
#49431 - Confusing error message when returning impl Trait with multiple lifetimes
#49288 - impl Trait Associated Types Do Not Leak Auto Traits
#49287 - Argument-position impl Trait requires a named lifetime
#46644 - Compiler incorrectly reports function return type declaration as source of inner type mismatch with conservative_impl_trait
#45994 - [impl Trait] Should we allow impl Trait after -> in fn types or parentheses sugar?
#43943 - Type mismatch with generic parameter returns less than helpful errors
#42940 - impl-trait return type is bounded by all input type parameters, even when unnecessary
#36375 - impl Trait fails to resolve when returning !
#36035 - Rustdoc generates docs for hidden methods in impls
#161645 - Regression in trait disambiguation with the next generation trait solver (-Znext-solver=globally)
#160669 - Zpolonius=next soundness bug: defining use of an opaque type discards the first one's region
#159750 - rustc after 1.91 hangs during type inference case
#158656 - [ICE]: DynCompatible "should have been handled by fulfillment already" for return-position impl Trait
#156013 - fn foo() -> impl Trait can't return Never type contrary to fn foo() -> ConcreteType
#155520 - Unsoundness in next-solver when checking lifetime requirements for RPIT
#153596 - lack of implied bounds for opaque types in binders is unsound
#153082 - we don't check associated type bounds of opaques for WF pre normalization
#152735 - Miscompilation causing segfault with dyn Future on recent nightly versions
#151595 - [ICE]: rustc panicked at compiler\rustc_mir_build\src\builder\matches\mod.rs:2176:44
#146921 - Misleading error when only an associated type implements a required trait
#145202 - Whether [const] RPIT is const depends on generic parameters
#144135 - We don't perform sized elaboration for impl-Trait-in-bindings (trait ascription)
#143531 - private_interfaces not linting RPITIT
#143022 - Higher-ranked lifetimes captured by impl Trait result in too many errors in 2024 edition
#141143 - ICE: name of non-Rpitit assoc item
#139659 - ICE: compiler/rustc_middle/src/ty/normalize_erasing_regions.rs:169:13: Failed to normalize Alias(...
#138948 - ICE: TAIT and incremental compilation
#136461 - "type annotations needed" for impl Trait type that cannot be annotated (caused by trying to use the type before creating it).
#135730 - ICE could not unify ! with revealed type
#133529 - Edition 2024 now reports: argument requires that '1 must outlive 'static
#133427 - RPITITs may imply unsound outlives for late-bound args in signature
#132681 - [ICE]: TyKind::Error constructed but no error reported
#132678 - [ICE]: failure to relate an opaque to itself should result in an error later
#125341 - returning a future from a function with an impl Trait argument references that argument even if not used in the future, causing lifetime errors
#125075 - RPIT with 'static bound lifetime capture issue with generic parameter
#122775 - TAIT: closure and RPIT causes "concrete type differs from previous defining opaque type use"
#121457 - ICE: encountered errors when checking RPITIT refinement (regions)
#121449 - The todo! macro does not play well with RPIT
#121404 - DefineOpaqueTypes::No in UFC Self resolution
#120514 - Generic Future<Output = ()> not matching impl Future<Output = ()>
#119253 - ICE with RPIT containing negative bound: failed to resolve instance
#117923 - Compiler not resolving opaque types with associated const equality in return type
#117861 - TAIT decision on "may define implies must define"
#117860 - TAIT decision on whether nested inner items may define
#117647 - New 2024-edition impl Trait lifetime capture rules means opaques now capture higher-ranked lifetimes
#117310 - surprising behaviour when relating opaque types in winnowing
#116877 - regression when relating two opaque types in canonical queries
#116794 - uncaptured lifetimes required to live as long as the opaque type
#115781 - regression: concrete type differs from previous defining opaque type use
#114728 - RPIT hidden types can be ill-formed
#114664 - ICE: -Zunpretty no def-id for fresh lifetime
#114597 - Two conflicting concrete types for the same opaque type
#114579 - Crate cloud-storage does not compile on nightly-2023-07-27
#113971 - opaque type definition: strict lifetime equality vs equal-by-inference
#113916 - "correctly" check opaque type lifetimes to be unique params
#113689 - ICE when trait resolution defines opaque types
#113594 - TAIT: "open drop from non-ADT"
#113278 - opaque type wf check anchor usage is unsound
#112602 - Cycle detected when computing type, but only when function is const
#112453 - change DefiningAnchor::Bind to a list of opaques
#112201 - ice: TyKind::Error constructed but no error reported
#111935 - RPIT allows defining use with invalid args
#111906 - ICE: opaque type with non-universal region args
#110726 - ICE with unused lifetime on recursive RPIT
#110623 - ICE: "no errors encountered even though delay_span_bug issued" in recursive impl
#109931 - Rustdoc lists empty opaque type for async fn
#109591 - Unnecessary lifetime error
#108592 - impl Trait lifetimes regression 1.67 part 2
#108591 - impl Trait lifetimes regression 1.67
#107883 - Returning impl Fn(T) -> impl Trait does not compile, unless you add an identity call
#107645 - TAIT defining scope options
#107516 - 1.67 regression with ……::{opaque#0}<'_> does not live long enough error
#107426 - Regression 1.66 "some_fn::{opaque#0}<'_> does not live long enough"
#106750 - RPIT with 'static bound captures lifetimes from generic arguments
#105787 - occurs check with aliases results in error, not ambiguity
#105544 - E0311 for impl Trait parameter type suggests invalid syntax
#105251 - nested rpit allows capturing illegal lifetimes
#104779 - opaque types, patterns and subtyping ICE: IndexMap: key not found
#104601 - Rust does not normalize opaque types with escaping bound vars
#103599 - ICE on recursive fn which returns impl T
#103532 - Tracking Issue for impl_trait_projections
#101186 - handle_opaque_type likely mis-uses eq relation
#100905 - Closure returned as impl FnOnce incorrectly borrows captured used-by-value iff it is Copy
#100187 - ICE: Region parameter out of range when substituting in region 'b (index=4)
#99914 - ICE: index out of bounds: the len is 323 but the index is 324, ena-0.14.0/src/snapshot_vec.rs:199:10
#99793 - False-positive "cycle detected" in const fn with RPIT
#99642 - ICE on nested RPIT: cannot prove CoerceUnsized predicate
#99490 - MIR dead code analysis affects TAIT inference
#98997 - False-positive "temporary dropped while borrowed" involving return-position impl Trait
#98993 - tait: "cycle detected when computing type" when using transmute.
#98719 - lifetime bound when returning impl Trait is not considered
#97104 - late-bound lifetimes on type-alias-impl-trait can be unsound
#97099 - ICE with higher-ranked nested RPIT
#96572 - TAIT: "unconstrained opaque type" error even if it's constrained
#96540 - regression from error on elided lifetime in path in -> impl Trait<...>
#96460 - impl trait: code that doesn't constrain a RPIT infers ()?
#96194 - nested RPIT and HRTB: unclear semantics and future incompatibility
#94429 - ICE on wrong generator yield/return type when using type_alias_impl_trait
#93841 - Compilation error regression on nightly
#93794 - Nightly fails to infer the type of iterator collect & impl IntoIterator, and gives confusing error message
#93237 - Segfault when returning deep function compositions
#92894 - Rust detects a conflict between non-conflicting implementations of a trait
#92833 - Stack overflow with impl Trait and multiple lifetimes... and a closure.
#89620 - Nonsensical diagnostic when returning closure
#88236 - ICE: impl for<'a> Hrtb<'a, Assoc = impl Send + 'a>
#88021 - Unable to specify lifetime bounded impl trait type for associated type
#87850 - Cycle when computing type of recursive opaque type
#87450 - Exponential compile time with recursive opaque type
#86411 - Incoherent impls are still allowed on opaque types
#85991 - Suggest using -> impl Trait when returning type parameter -> T where T: Trait
#84660 - Types defined with type_alias_impl_trait can be used for dispatch in trait impls. Which is unsound.
#84657 - Type alias impl trait doesn’t properly enforce outlives relations.
#84305 - Opaque impl Trait return types unsoundly ignoring lifetime constraints
#83701 - Tracking issue for explicit_generic_args_with_impl_trait
#83472 - ICE: panicked at 'assertion failed: body.yield_ty().is_some() == universal_regions.yield_ty.is_some()', compiler/rustc_mir/src/borrow_check/type_check/input_output.rs:106:9
#83021 - impl_trait_in_bindings is a breaking change
#82952 - ICE: type parameter E/#2 (E/2) out of range when substituting
#82171 - Unclear compiler error when impl Trait return value captures non-'static argument
#80675 - Unexpected "the parameter type T may not live long enough" at a point where T is not relevant
#80583 - Error when concrete type doesn't satisfy impl trait is poorly spanned
#80518 - Lifetime parameters on self + impl Traits requires unexpected workaround
#80476 - E0562 should mention impl Trait in argument position
#80150 - unclear diagnostic with invalid suggestion for lifetime error involving an opaque type
#79415 - impl Trait capturing lifetime of type parameter
#78936 - Compile error when providing explicit generic arguments where impl Trait appears in bound of generic type
#78906 - Detect type parameters that were meant to be impl Trait in return position
#78456 - ICE: tuple_fields called on non-tuple with type_alias_impl_trait, async block, and non-static trait lifetime
#78336 - ICE:assertion failed: body.yield_ty.is_some() && universal_regions.yield_ty.is_some() || body.yield_ty.is_none() && universal_regions.yield_ty.is_none()
#77898 - const initializer is not considered a "defining use" for type_alias_impl_trait
#77696 - broken MIR: bad assignment (&impl Trait = &S): NoSolution
#77112 - trait selection arbitrarily resolves projection ambiguities
#76882 - impl Trait + 'static is not 'static if returned from a generic function
#74363 - todo!(), unimplemented!(), panic!(), … don't play well with impl Trait
#74298 - Incoherent impls are allowed on opaque types
#74018 - ICE when playing around with existential types, impl trait
#73481 - Multiple defining uses of type alias impl trait in single function are not handled
#73239 - Problem with type inference and impl Trait
#72614 - Returning an impl Trait in associated type position results in error at point-of-use instead of point-of-definition
#72554 - Assertion failed in erroneous recursive types with methods returning a impl Trait type
#72207 - Specifying one associated type makes Rust forget about the constraint on the other ones
#71798 - thread 'rustc' panicked at 'assertion failed: !bounds.has_escaping_bound_vars()'
#71042 - ICE with opaquely typed constant used in pattern
#70997 - Bug. Get doubled error message with impl_trait_in_bindings when no error must be
#70971 - ICE: broken MIR with nested opaque types.
#70968 - Confusing error message with let _ : impl Trait;
#70877 - ICE whilst experimenting with opaque/existential types.
#70703 - Compiler unable to determine two types are equal
#69840 - ICE with impl_trait_in_bindings
#69096 - Rustc overflow its stack when using impl Trait and the struct containing the function itself
#68561 - impl Trait error message expected/found order are confusing
#68477 - ICE cause by tokio::spawn a async function return future opaque type
#68368 - ICE using type_alias_impl_trait feature
#68307 - Copy not implemented on returned closures
#68110 - Improve output of impl Trait errors
#68020 - Diagnostic should explain that 'impl trait' captures generic parameters
#67830 - "internal compiler error" on Higher-Ranked Trait Bound for impl Trait in return position
#67751 - Trait alias compilation failure when returning impl Alias
#67552 - [ICE] with recursive impl trait and Iterator.by_ref()
#67166 - quad-ICE with impl Trait in binding
#67117 - Print better auto-trait diagnostics when opaque return type is involved
#66580 - ICE with type_alias_impl_trait: ty_is_local invoked on unexpected type
#66523 - Confusing error message with panic!() and impl trait
#66057 - Can't call method on impl Trait without explicitly passing generic arguments
#65899 - Add more context when trying to write async trait function
#65679 - ICE when aliasing impl Future
#65582 - Non-'static lifetime inferred for return position impl Trait (fixed in beta)
#65581 - Rustc panics (NoSolution): could not prove Binder(projection soup)
#65561 - ICE when using 'impl Trait' with an infinity recursive function
#64848 - ICE: Associated constant and impl trait
#64565 - Invalid bound suggestion for argument-position impl trait
#64338 - Ffi safe lint ICE with type alias impl trait
#63794 - unimplemented macro doesnt compile with RPIT
#63706 - rustc suggests invalid syntax for missing method on impl Trait parameter
#63677 - rustc crash with type alias of impl trait
#63355 - ICE with type_alias_impl_trait: errors selecting obligation during MIR typeck
#63279 - ICE: instantiated twice
#63263 - ICE with closure return type as impl trait type alias defining use
#63205 - document some diagnostics for min TAIT in stabilization report
#63204 - Investigate whether Ty and OpaqueTy can be merged
#63169 - impl trait in type aliases does not trigger "private type in public interface" errors
#63167 - Confusing error message with type unification of impl Traits
#63154 - Associated types, impl traits ~and closures~; oh my, an ICE.
#63032 - Lifetime is unnecessarily captured in nested functions returning impl trait via async
#62988 - Existential types have issues with lifetimes
#62779 - Cross-crate re-export produces invalid rustdoc for impl Trait
#61997 - Tracking issue for member constraints in region inference
#61903 - Unable to return an impl Fn/FnMut/FnOnce that takes a concrete associated type
#61863 - Trying to use same existential type for two functions cause cycle dependency
#61773 - impl_trait_in_bindings and pick-constraint region bounds
#61577 - cycle error building rustc with debug logging
#61271 - Handle type error caused by returning specific type that would be solved by using impl Trait
#60855 - Should improper_ctypes pierce through impl Trait?
#60670 - Tracking issue for existential lifetimes
#60662 - HIR printing of existential type is broken
#60655 - existential type complains about '_ in concrete type of self-borrowing generators
#60564 - ICE with associated existential type
#60473 - ICE impl_trait_in_bindings with elided lifetime
#60414 - Using associated types in async fn type break typing
#60407 - ICE with existential_type feature
#60371 - Existential type ICE without feature specified
#60367 - impl_trait_in_bindings: Use function return type for binding?
#59631 - Recursive static with impl Trait errors out early
#59365 - Function with impl trait in argument position does not see all impls of trait on value returned from function with impl trait in return position
#59342 - Existential types for traits without generic type parameters make rustc panic
#59115 - Tracking issue for omit From::from from ? lowering for existentials
#59085 - Type alias used in async fn return type is wrongly reported unused
#59023 - impl Trait with < as Trait>::Type syntax does not work in return position
#59022 - -> impl Fn() fails with closures used as FnMut but actually Fn
#58956 - ICE with impl_trait_in_bindings when Wrapped
#58951 - ICE with #![feature(existential_type)] + closure
#58887 - ICE in typeck on existential return type in trait
#58817 - Upgrading nightly introduces compiler panic at visit_opaque_types
#58708 - impl trait from unboxed_closure does not accept closures
#58662 - existential Generator + lifetime type errors unless impl trait wrapper is used
#58624 - rustdoc can't handle existential types
#58504 - nightly compiler panic with type-annotated array of impl Generator
#58344 - ICE on generic impl trait convergence
#58011 - cargo doc fails to compile existential associated types
#57979 - Regression from stable to nightly: nested impl trait is not allowed
#57933 - The scope of associated existential types
#57807 - Compiler fails to unify existential associated type
#57700 - ICE when returning generic abitrary self type in defining function for existential associated type
#57678 - Existential types: Unused closure environment is part of concrete type
#57612 - Trait aliases considers same type as not equal to itself if used in impl Trait return type
#57611 - ICE when inferring the type of existential type with trait alias bounds
#57464 - Nightly rustc crashes with "unexpected region in query response"
#57266 - Error message for type mismatch between impl Traits needs better explanation
#57201 - Broken MIR impl_trait_in_bindings ICE
#57200 - NLL impl_trait_in_bindings ICE
#57188 - Existential type captures lifetime that doesn't appear in bounds even though it does appear
#56046 - Tracking issue for Captures trait
#55997 - Cycle detected when processing existential type
#55903 - ICE: "unexpected predicate" when using multiple lifetime parameters in existential type
#55872 - ICE: Type parameter W/#1 out of range when substituting
#55634 - Cyclic dependency bug processing RPIT impl Trait
#55608 - ICE on stable / nightly: ReEmpty
#55234 - impl_trait_in_bindings incremental compilation ICE
#55099 - Incorrect inference of lifetime bound for existential type
#55027 - "trait is not implemented" error when returning "impl Trait" hides a more useful error
#55022 - Issue with impl Trait and panic!()
#54899 - ICE with existential associated type
#54895 - ICE when using anonymization in impl Trait with HRTB
#54840 - ICE when trying to use &impl in a binding
#54600 - impl_trait_in_bindings fails with Option<impl Trait>
#54593 - NLL type-checking ICEs on closure recursing on impl Trait-returning enclosing function.
#54560 - Confusing error message for impl Trait consts/statics that use generics
#54283 - Stability checker prevents return-position impl trait in the standard library
#54234 - Incorrect warning: type alias is never used
#54169 - ICE in existential type with lifetime in trait implementation
#54045 - Regression in #[allow(deprecated)] for impl Trait return type
#53984 - impl Trait with associated type equality constraint fails to resolve when constraint contains associated type of non-parameter type
#53920 - ICE: Cannot create local mono-item within future returned as impl trait
#53791 - existential impl Trait gets seriously confused about lifetimes, "impl T + 'static" does not satisfy static lifetime
#53690 - async fn cannot be recursive
#53613 - Lifetimes get replaced with 'static in Self within (return position) impl Trait.
#53598 - ICE: Existential type (w/ and w/o NLL)
#53546 - Existential type complains about private type in public interface if concrete type is not pub
#53457 - non-defining existential type use in defining scope with empty lifetime name
#53443 - ICE when existential type is exported from one crate and used in another
#53398 - existential types cannot be defined in terms of themselves at all
#53345 - Implementing trait for Existential type ICE's
#53096 - ICE 2018 edition with const fn and existential type
#53092 - FullfillmentError ICE with const fn and existential type
#53090 - existential type can accept generic bounds that do not specify a trait
#53087 - ICE with const transmute and existential type
#52985 - Existential type ICE
#52901 - Bad error message with wrong impl trait-parameter on trait implementation
#52843 - ICE on unsound usage of existential types
#52701 - infinite recursion ICE
#52632 - Existential type can have inconsistent concrete type
#52376 - Rustdoc not showing return type but showing return type lifetimes
#52304 - Compiler panic on type inference for impl Generator yielding a reference
#51525 - existential impl trait overlooks "hidden" lifetimes from projections
#51282 - impl Trait return value infers 'static lifetime
#51069 - impl Trait return value causes an over-restricted lifetime requirement
#50990 - An unused type parameter and an impl in the argument position allows you to define a function that cannot be called
#50950 - Able to use the turbofish syntax with impl trait for methods
#50881 - ICE using function pointer to function returning impl Iterator<Item = &&'a str>
#50865 - Compiler crashed with cannot create local mono-item
#50823 - impl Trait causes "borrowed value does not live long enough"
#50817 - Wrong suggestion for fixing argument-position impl Trait
#50652 - Regression in return type error quality with impl trait
#50626 - impl Trait binary operations
#50358 - rustdoc panic while documenting impl trait in argument position
#49926 - impossible case reached on lifetime inference for impl Trait in return position
#49685 - [ICE] librustc_traits/normalize_erasing_regions.rs:46: could not fully normalize ...
#49376 - rustc has a stack overflow when using impl Trait of a trait with a generic parameter with a default type of Self
#48467 - impl trait error message around 'static is probably confusing
#48290 - Confusing Error Message with Impl Trait in E0308
#48140 - ICE with conservative_impl_trait
#47764 - ICE with impl FnOnce... in argument position. Unexpected panic.
#47715 - Compiler crash when using impl Trait to bound associated type parameter
#47422 - missing specialization: <encoder::EncodeContext as SpecializedEncoder<rustc::hir::def_id::LocalDefId>>::specialized_encode not overriden
#47348 - impl Trait feature is not make code easy
#46976 - Rustdoc ICE with argument position impl Trait
#46959 - Universal impl trait shows camel case name warning
#46685 - ICE combining universal plus existential impl Trait
#46541 - 🚀 existential impl Trait allows lifetimes that would not be allowed by abstract type
#46504 - Compiler error: returning impl Generator
#46476 - ICE when using impl Iterator<Item = &'a Path> + 'a
#46470 - [ICE] with conservative_impl_trait and universal_impl_trait
#46469 - [ICE] with universal_impl_trait
#46468 - [ICE] with underscore_lifetimes
#46464 - Nested "impl trait" with lifetimes causing internal compiler error
#46456 - librustc_trans_utils/collector.rs:743: Cannot create local trans-item for DefId(11/0:54 ~ stpl[d907]::html[0]::h1[0])
#45800 - Link error with incremental and impl trait
#45690 - ICE with conservative_impl_trait
#44956 - Rustc nightly 2017-09-19 crashes because of impl Iterator with reference Item
#44923 - Purely-diverging functions cannot return impl Trait.
#44721 - impl Trait in argument position
#44686 - Tracking issue for impl trait in const/static/let
#44685 - Tracking issue for existential types (RFC 2071)
#44530 - Return type that doesn't satisfy impl Trait messages should point out the reason
#44437 - None.unwrap() in FnCtxt::instantiate_anon_types
#44198 - Impl Trait ICE: escaping regions in predicate
#44181 - ICE with generators and impl Trait: "Cannot create local trans-item"
#43774 - error: internal compiler error: unexpected panic
#43719 - "only named lifetimes allowed in impl Trait" could have a better error message
#43718 - ICE: escaping regions in predicate Obligation(...)
#43263 - Recursive impl-trait type causes compiler stack overflow
#43135 - Using impl Trait with closure local functions across crates results in ICE
#43073 - ICE with impl_trait
#43021 - compiler panic impl Trait
#42451 - With impl trait, some variables are not recognised as 'static when used with AsRef.
#42399 - ICE in conservative_impl_trait over VecDeque<String> Iterator
#42183 - Tracking issue for RFC 1951: Finalize syntax and parameter scoping for impl Trait, while expanding it to arguments
#41407 - type mismatch resolving <Thing as FromStr>::Err == <Thing as FromStr>::Err, with impl trait
#41297 - impl Future used across crate boundaries produces an error
#41182 - [ICE] [conservative_impl_trait] escaping regions in predicate
#39639 - 'rustc' has overflowed its stack error
#38064 - Infinite size checker doesn't see through impl Trait, leading to rustc overflow
#37790 - Borrowing issue with impl Trait leads to unergonomic verbosity
#37454 - Option + impl Trait = uncompilable code (?)
#37096 - ICE: "Unexpected tail in unsized_info_ty" when using impl Trait
#35870 - Using impl trait across crates results in linker error
Future extensions
async fn in trait method
not stabilized yet
Async iterators or stream
unresolved
Async closures
not stabilized yet
/
RFC 2394
/
#62290
async ecosystem
tokio -
An event-driven, non-blocking I/O platform for writing asynchronous applications.
It has async/await support starting from 0.2.0-alpha.1
#1201
smol -
A small, fast, modular async runtime. It provides all the interfaces you
are used to, but in an async version and designed for Rust's
async/await syntax. Most of its functionality is
re-exported from other small crates, which you can use directly if you
don't need all of smol.
actix -
A actors framework providing higher-level abstraction for tokio.
thin_main_loop -
An experimental, cross platform, main loop and futures executor/reactor,
that binds to the OS APIs suitable for making native GUI applications.
It supports callbacks as well as the async/await syntax.
async-task -
Task abstraction for building executors.
Posts about async
Generated at Mon, 31 Aug 2026 09:53:14 +0000
Fork me on GitHub