diff options
| author | bors <bors@rust-lang.org> | 2021-09-01 03:43:37 +0000 | 
|---|---|---|
| committer | bors <bors@rust-lang.org> | 2021-09-01 03:43:37 +0000 | 
| commit | c4f26b15e37101c54829efab456922a53e3103ad (patch) | |
| tree | ce7caaa6f4446a1faa1414554ef0f1715847a4f9 /compiler/rustc_query_impl/src/keys.rs | |
| parent | c2a408840ad18f74280805535f0b7193528ff3df (diff) | |
| parent | d96234bed72e1935d8ab9a0c7a7e70027c86ad77 (diff) | |
| download | rust-c4f26b15e37101c54829efab456922a53e3103ad.tar.gz rust-c4f26b15e37101c54829efab456922a53e3103ad.zip | |
Auto merge of #88121 - camelid:better-recursive-alias-error, r=estebank
Improve errors for recursive type aliases Fixes #17539.
Diffstat (limited to 'compiler/rustc_query_impl/src/keys.rs')
| -rw-r--r-- | compiler/rustc_query_impl/src/keys.rs | 17 | 
1 files changed, 17 insertions, 0 deletions
| diff --git a/compiler/rustc_query_impl/src/keys.rs b/compiler/rustc_query_impl/src/keys.rs index d85f1c04524..c973eae6b06 100644 --- a/compiler/rustc_query_impl/src/keys.rs +++ b/compiler/rustc_query_impl/src/keys.rs @@ -20,6 +20,12 @@ pub trait Key { /// In the event that a cycle occurs, if no explicit span has been /// given for a query with key `self`, what span should we use? fn default_span(&self, tcx: TyCtxt<'_>) -> Span; + + /// If the key is a [`DefId`] or `DefId`--equivalent, return that `DefId`. + /// Otherwise, return `None`. + fn key_as_def_id(&self) -> Option<DefId> { + None + } } impl Key for () { @@ -95,6 +101,9 @@ impl Key for LocalDefId { fn default_span(&self, tcx: TyCtxt<'_>) -> Span { self.to_def_id().default_span(tcx) } + fn key_as_def_id(&self) -> Option<DefId> { + Some(self.to_def_id()) + } } impl Key for DefId { @@ -105,6 +114,10 @@ impl Key for DefId { fn default_span(&self, tcx: TyCtxt<'_>) -> Span { tcx.def_span(*self) } + #[inline(always)] + fn key_as_def_id(&self) -> Option<DefId> { + Some(*self) + } } impl Key for ty::WithOptConstParam<LocalDefId> { @@ -165,6 +178,10 @@ impl Key for (DefId, Option<Ident>) { fn default_span(&self, tcx: TyCtxt<'_>) -> Span { tcx.def_span(self.0) } + #[inline(always)] + fn key_as_def_id(&self) -> Option<DefId> { + Some(self.0) + } } impl Key for (DefId, LocalDefId, Ident) { | 
