Rollup merge of #78349 - JohnTitor:issue-75962, r=davidtwco
Use its own `TypeckResults` to avoid ICE Fixes #75962
This commit is contained in:
commit
6abd2a59e7
5 changed files with 26 additions and 7 deletions
|
@ -630,9 +630,14 @@ impl<'tcx> SaveContext<'tcx> {
|
||||||
})
|
})
|
||||||
| Node::Ty(&hir::Ty { kind: hir::TyKind::Path(ref qpath), .. }) => match qpath {
|
| Node::Ty(&hir::Ty { kind: hir::TyKind::Path(ref qpath), .. }) => match qpath {
|
||||||
hir::QPath::Resolved(_, path) => path.res,
|
hir::QPath::Resolved(_, path) => path.res,
|
||||||
hir::QPath::TypeRelative(..) | hir::QPath::LangItem(..) => self
|
hir::QPath::TypeRelative(..) | hir::QPath::LangItem(..) => {
|
||||||
.maybe_typeck_results
|
// #75962: `self.typeck_results` may be different from the `hir_id`'s result.
|
||||||
.map_or(Res::Err, |typeck_results| typeck_results.qpath_res(qpath, hir_id)),
|
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 {
|
Node::Binding(&hir::Pat {
|
||||||
|
|
|
@ -262,7 +262,7 @@ impl<'hir> Sig for hir::Ty<'hir> {
|
||||||
} else {
|
} else {
|
||||||
let start = offset + prefix.len() + 5;
|
let start = offset + prefix.len() + 5;
|
||||||
let end = start + name.len();
|
let end = start + name.len();
|
||||||
// FIXME should put the proper path in there, not elipses.
|
// FIXME should put the proper path in there, not ellipsis.
|
||||||
Ok(Signature {
|
Ok(Signature {
|
||||||
text: prefix + "...::" + &name,
|
text: prefix + "...::" + &name,
|
||||||
defs: vec![],
|
defs: vec![],
|
||||||
|
@ -272,7 +272,7 @@ impl<'hir> Sig for hir::Ty<'hir> {
|
||||||
}
|
}
|
||||||
hir::TyKind::Path(hir::QPath::TypeRelative(ty, segment)) => {
|
hir::TyKind::Path(hir::QPath::TypeRelative(ty, segment)) => {
|
||||||
let nested_ty = ty.make(offset + 1, id, scx)?;
|
let nested_ty = ty.make(offset + 1, id, scx)?;
|
||||||
let prefix = format!("<{}>::", nested_ty.text,);
|
let prefix = format!("<{}>::", nested_ty.text);
|
||||||
|
|
||||||
let name = path_segment_to_string(segment);
|
let name = path_segment_to_string(segment);
|
||||||
let res = scx.get_path_res(id.ok_or("Missing id for Path")?);
|
let res = scx.get_path_res(id.ok_or("Missing id for Path")?);
|
||||||
|
@ -551,7 +551,7 @@ impl<'hir> Sig for hir::Item<'hir> {
|
||||||
// FIXME where clause
|
// FIXME where clause
|
||||||
}
|
}
|
||||||
hir::ItemKind::ForeignMod(_) => Err("extern mod"),
|
hir::ItemKind::ForeignMod(_) => Err("extern mod"),
|
||||||
hir::ItemKind::GlobalAsm(_) => Err("glboal asm"),
|
hir::ItemKind::GlobalAsm(_) => Err("global asm"),
|
||||||
hir::ItemKind::ExternCrate(_) => Err("extern crate"),
|
hir::ItemKind::ExternCrate(_) => Err("extern crate"),
|
||||||
hir::ItemKind::OpaqueTy(..) => Err("opaque type"),
|
hir::ItemKind::OpaqueTy(..) => Err("opaque type"),
|
||||||
// FIXME should implement this (e.g., pub use).
|
// FIXME should implement this (e.g., pub use).
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
warning: the feature `impl_trait_in_bindings` is incomplete and may not be safe to use and/or cause compiler crashes
|
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
|
--> $DIR/bound-normalization-pass.rs:8:12
|
||||||
|
|
|
|
||||||
LL | #![feature(impl_trait_in_bindings)]
|
LL | #![feature(impl_trait_in_bindings)]
|
||||||
| ^^^^^^^^^^^^^^^^^^^^^^
|
| ^^^^^^^^^^^^^^^^^^^^^^
|
|
@ -1,5 +1,8 @@
|
||||||
// check-pass
|
// check-pass
|
||||||
// edition:2018
|
// 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(type_alias_impl_trait)]
|
||||||
#![feature(impl_trait_in_bindings)]
|
#![feature(impl_trait_in_bindings)]
|
||||||
|
|
11
src/test/ui/impl-trait/bound-normalization-pass.sa.stderr
Normal file
11
src/test/ui/impl-trait/bound-normalization-pass.sa.stderr
Normal file
|
@ -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 <https://github.com/rust-lang/rust/issues/63065> for more information
|
||||||
|
|
||||||
|
warning: 1 warning emitted
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue