mirror of
https://github.com/rust-lang/rust.git
synced 2024-11-23 07:14:28 +00:00
check_pat_path: use pattern_cause
This commit is contained in:
parent
1d33717583
commit
e9f6bb7f79
@ -155,7 +155,7 @@ impl<'a, 'tcx> FnCtxt<'a, 'tcx> {
|
||||
self.check_pat_tuple_struct(pat, qpath, subpats, ddpos, expected, def_bm, ti)
|
||||
}
|
||||
PatKind::Path(ref qpath) => {
|
||||
self.check_pat_path(pat, path_res.unwrap(), qpath, expected)
|
||||
self.check_pat_path(pat, path_res.unwrap(), qpath, expected, ti)
|
||||
}
|
||||
PatKind::Struct(ref qpath, fields, etc) => {
|
||||
self.check_pat_struct(pat, qpath, fields, etc, expected, def_bm, ti)
|
||||
@ -671,6 +671,7 @@ impl<'a, 'tcx> FnCtxt<'a, 'tcx> {
|
||||
path_resolution: (Res, Option<Ty<'tcx>>, &'b [hir::PathSegment<'b>]),
|
||||
qpath: &hir::QPath<'_>,
|
||||
expected: Ty<'tcx>,
|
||||
ti: TopInfo<'tcx>,
|
||||
) -> Ty<'tcx> {
|
||||
let tcx = self.tcx;
|
||||
|
||||
@ -696,7 +697,11 @@ impl<'a, 'tcx> FnCtxt<'a, 'tcx> {
|
||||
|
||||
// Type-check the path.
|
||||
let pat_ty = self.instantiate_value_path(segments, opt_ty, res, pat.span, pat.hir_id).0;
|
||||
self.demand_suptype(pat.span, expected, pat_ty);
|
||||
if let Some(mut err) =
|
||||
self.demand_suptype_with_origin(&self.pattern_cause(ti, pat.span), expected, pat_ty)
|
||||
{
|
||||
err.emit();
|
||||
}
|
||||
pat_ty
|
||||
}
|
||||
|
||||
|
@ -12,6 +12,9 @@ LL | Some(k) => match k {
|
||||
error[E0308]: mismatched types
|
||||
--> $DIR/issue-12552.rs:9:5
|
||||
|
|
||||
LL | match t {
|
||||
| - this expression has type `std::result::Result<_, {integer}>`
|
||||
...
|
||||
LL | None => ()
|
||||
| ^^^^ expected enum `std::result::Result`, found enum `std::option::Option`
|
||||
|
|
||||
|
@ -2,7 +2,9 @@ error[E0308]: mismatched types
|
||||
--> $DIR/issue-37026.rs:6:9
|
||||
|
|
||||
LL | let empty_struct::XEmpty2 = ();
|
||||
| ^^^^^^^^^^^^^^^^^^^^^ expected `()`, found struct `empty_struct::XEmpty2`
|
||||
| ^^^^^^^^^^^^^^^^^^^^^ -- this expression has type `()`
|
||||
| |
|
||||
| expected `()`, found struct `empty_struct::XEmpty2`
|
||||
|
||||
error[E0308]: mismatched types
|
||||
--> $DIR/issue-37026.rs:7:9
|
||||
|
@ -1,6 +1,8 @@
|
||||
error[E0308]: mismatched types
|
||||
--> $DIR/issue-5100.rs:8:9
|
||||
|
|
||||
LL | match (true, false) {
|
||||
| ------------- this expression has type `(bool, bool)`
|
||||
LL | A::B => (),
|
||||
| ^^^^ expected tuple, found enum `A`
|
||||
|
|
||||
|
@ -1,6 +1,8 @@
|
||||
error[E0308]: mismatched types
|
||||
--> $DIR/issue-7867.rs:7:9
|
||||
|
|
||||
LL | match (true, false) {
|
||||
| ------------- this expression has type `(bool, bool)`
|
||||
LL | A::B => (),
|
||||
| ^^^^ expected tuple, found enum `A`
|
||||
|
|
||||
|
@ -2,7 +2,9 @@ error[E0308]: mismatched types
|
||||
--> $DIR/match-tag-nullary.rs:4:40
|
||||
|
|
||||
LL | fn main() { let x: A = A::A; match x { B::B => { } } }
|
||||
| ^^^^ expected enum `A`, found enum `B`
|
||||
| - ^^^^ expected enum `A`, found enum `B`
|
||||
| |
|
||||
| this expression has type `A`
|
||||
|
||||
error: aborting due to previous error
|
||||
|
||||
|
@ -1,6 +1,8 @@
|
||||
error[E0308]: mismatched types
|
||||
--> $DIR/pattern-ident-path-generics.rs:3:9
|
||||
|
|
||||
LL | match Some("foo") {
|
||||
| ----------- this expression has type `std::option::Option<&str>`
|
||||
LL | None::<isize> => {}
|
||||
| ^^^^^^^^^^^^^ expected `&str`, found `isize`
|
||||
|
|
||||
|
@ -2,7 +2,9 @@ error[E0308]: mismatched types
|
||||
--> $DIR/name-clash-nullary.rs:2:7
|
||||
|
|
||||
LL | let None: isize = 42;
|
||||
| ^^^^ expected `isize`, found enum `std::option::Option`
|
||||
| ^^^^ ----- expected due to this
|
||||
| |
|
||||
| expected `isize`, found enum `std::option::Option`
|
||||
|
|
||||
= note: expected type `isize`
|
||||
found enum `std::option::Option<_>`
|
||||
|
@ -1,6 +1,8 @@
|
||||
error[E0308]: mismatched types
|
||||
--> $DIR/const.rs:14:9
|
||||
|
|
||||
LL | match &f {
|
||||
| -- this expression has type `&Foo`
|
||||
LL | FOO => {},
|
||||
| ^^^ expected `&Foo`, found struct `Foo`
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user