From 88d39673d7147af0d33705ffe06a83876e70aa2d Mon Sep 17 00:00:00 2001 From: Yuki Okushi Date: Sun, 25 Oct 2020 18:33:13 +0900 Subject: Use its own `TypeckResults` to avoid ICE --- compiler/rustc_save_analysis/src/lib.rs | 11 ++++++++--- .../ui/impl-trait/bound-normalization-pass.default.stderr | 11 +++++++++++ src/test/ui/impl-trait/bound-normalization-pass.rs | 3 +++ src/test/ui/impl-trait/bound-normalization-pass.sa.stderr | 11 +++++++++++ src/test/ui/impl-trait/bound-normalization-pass.stderr | 11 ----------- 5 files changed, 33 insertions(+), 14 deletions(-) create mode 100644 src/test/ui/impl-trait/bound-normalization-pass.default.stderr create mode 100644 src/test/ui/impl-trait/bound-normalization-pass.sa.stderr delete mode 100644 src/test/ui/impl-trait/bound-normalization-pass.stderr diff --git a/compiler/rustc_save_analysis/src/lib.rs b/compiler/rustc_save_analysis/src/lib.rs index f6434689fec..48d15370ee3 100644 --- a/compiler/rustc_save_analysis/src/lib.rs +++ b/compiler/rustc_save_analysis/src/lib.rs @@ -630,9 +630,14 @@ impl<'tcx> SaveContext<'tcx> { }) | Node::Ty(&hir::Ty { kind: hir::TyKind::Path(ref qpath), .. }) => match qpath { hir::QPath::Resolved(_, path) => path.res, - hir::QPath::TypeRelative(..) | hir::QPath::LangItem(..) => self - .maybe_typeck_results - .map_or(Res::Err, |typeck_results| typeck_results.qpath_res(qpath, hir_id)), + hir::QPath::TypeRelative(..) | hir::QPath::LangItem(..) => { + // #75962: `self.typeck_results` may be different from the `hir_id`'s result. + if self.tcx.has_typeck_results(hir_id.owner.to_def_id()) { + self.tcx.typeck(hir_id.owner).qpath_res(qpath, hir_id) + } else { + Res::Err + } + } }, Node::Binding(&hir::Pat { diff --git a/src/test/ui/impl-trait/bound-normalization-pass.default.stderr b/src/test/ui/impl-trait/bound-normalization-pass.default.stderr new file mode 100644 index 00000000000..ef3cb740112 --- /dev/null +++ b/src/test/ui/impl-trait/bound-normalization-pass.default.stderr @@ -0,0 +1,11 @@ +warning: the feature `impl_trait_in_bindings` is incomplete and may not be safe to use and/or cause compiler crashes + --> $DIR/bound-normalization-pass.rs:8:12 + | +LL | #![feature(impl_trait_in_bindings)] + | ^^^^^^^^^^^^^^^^^^^^^^ + | + = note: `#[warn(incomplete_features)]` on by default + = note: see issue #63065 for more information + +warning: 1 warning emitted + diff --git a/src/test/ui/impl-trait/bound-normalization-pass.rs b/src/test/ui/impl-trait/bound-normalization-pass.rs index fff17667fda..3e6884ef10f 100644 --- a/src/test/ui/impl-trait/bound-normalization-pass.rs +++ b/src/test/ui/impl-trait/bound-normalization-pass.rs @@ -1,5 +1,8 @@ // check-pass // edition:2018 +// revisions: default sa +//[sa] compile-flags: -Z save-analysis +//-^ To make this the regression test for #75962. #![feature(type_alias_impl_trait)] #![feature(impl_trait_in_bindings)] diff --git a/src/test/ui/impl-trait/bound-normalization-pass.sa.stderr b/src/test/ui/impl-trait/bound-normalization-pass.sa.stderr new file mode 100644 index 00000000000..ef3cb740112 --- /dev/null +++ b/src/test/ui/impl-trait/bound-normalization-pass.sa.stderr @@ -0,0 +1,11 @@ +warning: the feature `impl_trait_in_bindings` is incomplete and may not be safe to use and/or cause compiler crashes + --> $DIR/bound-normalization-pass.rs:8:12 + | +LL | #![feature(impl_trait_in_bindings)] + | ^^^^^^^^^^^^^^^^^^^^^^ + | + = note: `#[warn(incomplete_features)]` on by default + = note: see issue #63065 for more information + +warning: 1 warning emitted + diff --git a/src/test/ui/impl-trait/bound-normalization-pass.stderr b/src/test/ui/impl-trait/bound-normalization-pass.stderr deleted file mode 100644 index afc181a906a..00000000000 --- a/src/test/ui/impl-trait/bound-normalization-pass.stderr +++ /dev/null @@ -1,11 +0,0 @@ -warning: the feature `impl_trait_in_bindings` is incomplete and may not be safe to use and/or cause compiler crashes - --> $DIR/bound-normalization-pass.rs:5:12 - | -LL | #![feature(impl_trait_in_bindings)] - | ^^^^^^^^^^^^^^^^^^^^^^ - | - = note: `#[warn(incomplete_features)]` on by default - = note: see issue #63065 for more information - -warning: 1 warning emitted - -- cgit 1.4.1-3-g733a5