diff options
| author | Matthias Krüger <matthias.krueger@famsik.de> | 2022-06-04 23:42:04 +0200 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2022-06-04 23:42:04 +0200 |
| commit | 1794309e0aa451e63d74511d4af595a5bcd0f685 (patch) | |
| tree | a6b7bf7a28772ae52c3b1da7e4aa66c1aa1c16aa | |
| parent | 8d0de3a8da50c2a0eca8e8ece13b77d712d8652d (diff) | |
| parent | dd38fecb78dcccf2c8b506cf901bdce1ba1a6df8 (diff) | |
| download | rust-1794309e0aa451e63d74511d4af595a5bcd0f685.tar.gz rust-1794309e0aa451e63d74511d4af595a5bcd0f685.zip | |
Rollup merge of #97737 - jackh726:verbose-pretty-printing-fix, r=compiler-errors
Fix pretty printing named bound regions under -Zverbose Fixed regression introduced in #97023 r? `@compiler-errors` cc `@cjgillot`
| -rw-r--r-- | compiler/rustc_middle/src/ty/print/pretty.rs | 54 |
1 files changed, 30 insertions, 24 deletions
diff --git a/compiler/rustc_middle/src/ty/print/pretty.rs b/compiler/rustc_middle/src/ty/print/pretty.rs index 64c63e3d567..08879afa64a 100644 --- a/compiler/rustc_middle/src/ty/print/pretty.rs +++ b/compiler/rustc_middle/src/ty/print/pretty.rs @@ -2190,34 +2190,40 @@ impl<'tcx> FmtPrinter<'_, 'tcx> { // this is not *quite* right and changes the ordering of some output // anyways. let (new_value, map) = if self.tcx().sess.verbose() { - // anon index + 1 (BrEnv takes 0) -> name - let mut region_map: FxHashMap<_, _> = Default::default(); - let bound_vars = value.bound_vars(); - for var in bound_vars { - let ty::BoundVariableKind::Region(var) = var else { continue }; - match var { - ty::BrAnon(_) | ty::BrEnv => { - start_or_continue(&mut self, "for<", ", "); - let name = next_name(&self); - do_continue(&mut self, name); - region_map.insert(var, ty::BrNamed(CRATE_DEF_ID.to_def_id(), name)); - } - ty::BrNamed(def_id, kw::UnderscoreLifetime) => { - start_or_continue(&mut self, "for<", ", "); - let name = next_name(&self); - do_continue(&mut self, name); - region_map.insert(var, ty::BrNamed(def_id, name)); - } - ty::BrNamed(_, name) => { - start_or_continue(&mut self, "for<", ", "); - do_continue(&mut self, name); + let regions: Vec<_> = value + .bound_vars() + .into_iter() + .map(|var| { + let ty::BoundVariableKind::Region(var) = var else { + // This doesn't really matter because it doesn't get used, + // it's just an empty value + return ty::BrAnon(0); + }; + match var { + ty::BrAnon(_) | ty::BrEnv => { + start_or_continue(&mut self, "for<", ", "); + let name = next_name(&self); + do_continue(&mut self, name); + ty::BrNamed(CRATE_DEF_ID.to_def_id(), name) + } + ty::BrNamed(def_id, kw::UnderscoreLifetime) => { + start_or_continue(&mut self, "for<", ", "); + let name = next_name(&self); + do_continue(&mut self, name); + ty::BrNamed(def_id, name) + } + ty::BrNamed(def_id, name) => { + start_or_continue(&mut self, "for<", ", "); + do_continue(&mut self, name); + ty::BrNamed(def_id, name) + } } - } - } + }) + .collect(); start_or_continue(&mut self, "", "> "); self.tcx.replace_late_bound_regions(value.clone(), |br| { - let kind = region_map[&br.kind]; + let kind = regions[br.var.as_usize()]; self.tcx.mk_region(ty::ReLateBound( ty::INNERMOST, ty::BoundRegion { var: br.var, kind }, |
