Make async drop code more consistent with regular drop code
Fixes #126573
This commit is contained in:
parent
f873ae029e
commit
af10880f6b
4 changed files with 67 additions and 14 deletions
|
@ -1554,12 +1554,13 @@ rustc_queries! {
|
|||
}
|
||||
}
|
||||
|
||||
/// The entire set of monomorphizations the local crate can safely link
|
||||
/// to because they are exported from upstream crates. Do not depend on
|
||||
/// this directly, as its value changes anytime a monomorphization gets
|
||||
/// added or removed in any upstream crate. Instead use the narrower
|
||||
/// `upstream_monomorphizations_for`, `upstream_drop_glue_for`, or, even
|
||||
/// better, `Instance::upstream_monomorphization()`.
|
||||
/// The entire set of monomorphizations the local crate can safely
|
||||
/// link to because they are exported from upstream crates. Do
|
||||
/// not depend on this directly, as its value changes anytime
|
||||
/// a monomorphization gets added or removed in any upstream
|
||||
/// crate. Instead use the narrower `upstream_monomorphizations_for`,
|
||||
/// `upstream_drop_glue_for`, `upstream_async_drop_glue_for`, or,
|
||||
/// even better, `Instance::upstream_monomorphization()`.
|
||||
query upstream_monomorphizations(_: ()) -> &'tcx DefIdMap<UnordMap<GenericArgsRef<'tcx>, CrateNum>> {
|
||||
arena_cache
|
||||
desc { "collecting available upstream monomorphizations" }
|
||||
|
@ -1601,6 +1602,26 @@ rustc_queries! {
|
|||
desc { "available upstream drop-glue for `{:?}`", args }
|
||||
}
|
||||
|
||||
/// Returns the upstream crate that exports async-drop-glue for
|
||||
/// the given type (`args` is expected to be a single-item list
|
||||
/// containing the type one wants async-drop-glue for).
|
||||
///
|
||||
/// This is a subset of `upstream_monomorphizations_for` in order
|
||||
/// to increase dep-tracking granularity. Otherwise adding or
|
||||
/// removing any type with async-drop-glue in any upstream crate
|
||||
/// would invalidate all functions calling async-drop-glue of an
|
||||
/// upstream type.
|
||||
///
|
||||
/// You likely want to call `Instance::upstream_monomorphization()`
|
||||
/// instead of invoking this query directly.
|
||||
///
|
||||
/// NOTE: This query could easily be extended to also support other
|
||||
/// common functions that have are large set of monomorphizations
|
||||
/// (like `Clone::clone` for example).
|
||||
query upstream_async_drop_glue_for(args: GenericArgsRef<'tcx>) -> Option<CrateNum> {
|
||||
desc { "available upstream async-drop-glue for `{:?}`", args }
|
||||
}
|
||||
|
||||
/// Returns a list of all `extern` blocks of a crate.
|
||||
query foreign_modules(_: CrateNum) -> &'tcx FxIndexMap<DefId, ForeignModule> {
|
||||
arena_cache
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue