Auto merge of #103116 - TaKO8Ki:fix-103053, r=lcnr

Fix `own_substs` ICE

Fixes #103053
This commit is contained in:
bors 2022-10-17 08:04:52 +00:00
commit c19a893f87
3 changed files with 44 additions and 5 deletions

View File

@ -902,11 +902,18 @@ fn expr_inferred_subst_iter(
// impl is currently the `DefId` of `Output` in the trait definition
// which makes this somewhat difficult and prevents us from just
// using `self.path_inferred_subst_iter` here.
hir::ExprKind::Struct(&hir::QPath::Resolved(_self_ty, path), _, _) => {
if let Some(ty) = self.opt_node_type(expr.hir_id) {
if let ty::Adt(_, substs) = ty.kind() {
return Box::new(self.resolved_path_inferred_subst_iter(path, substs));
}
hir::ExprKind::Struct(&hir::QPath::Resolved(_self_ty, path), _, _)
// FIXME(TaKO8Ki): Ideally we should support this. For that
// we have to map back from the self type to the
// type alias though. That's difficult.
//
// See the `need_type_info/issue-103053.rs` test for
// a example.
if !matches!(path.res, Res::Def(DefKind::TyAlias, _)) => {
if let Some(ty) = self.opt_node_type(expr.hir_id)
&& let ty::Adt(_, substs) = ty.kind()
{
return Box::new(self.resolved_path_inferred_subst_iter(path, substs));
}
}
hir::ExprKind::MethodCall(segment, ..) => {

View File

@ -0,0 +1,18 @@
trait TypeMapper {
type MapType;
}
type Mapped<T> = <T as TypeMapper>::MapType;
struct Test {}
impl TypeMapper for () {
type MapType = Test;
}
fn test() {
Mapped::<()> {};
None; //~ ERROR type annotations needed
}
fn main() {}

View File

@ -0,0 +1,14 @@
error[E0282]: type annotations needed
--> $DIR/issue-103053.rs:15:5
|
LL | None;
| ^^^^ cannot infer type of the type parameter `T` declared on the enum `Option`
|
help: consider specifying the generic argument
|
LL | None::<T>;
| +++++
error: aborting due to previous error
For more information about this error, try `rustc --explain E0282`.