mirror of
https://github.com/rust-lang/rust.git
synced 2025-01-09 14:25:24 +00:00
correct E0619 span re method call receivers whose type must be known
Previously, when the type of a method receiver could not be determined, the error message would, potentially confusingly, highlight the span of the entire method call. Resolves #36598, resolves #42234.
This commit is contained in:
parent
6c04c41034
commit
b55e07ee50
@ -2925,7 +2925,7 @@ impl<'a, 'gcx, 'tcx> FnCtxt<'a, 'gcx, 'tcx> {
|
||||
let rcvr = &args[0];
|
||||
let rcvr_t = self.check_expr_with_needs(&rcvr, needs);
|
||||
// no need to check for bot/err -- callee does that
|
||||
let rcvr_t = self.structurally_resolved_type(expr.span, rcvr_t);
|
||||
let rcvr_t = self.structurally_resolved_type(args[0].span, rcvr_t);
|
||||
|
||||
let method = match self.lookup_method(rcvr_t,
|
||||
segment,
|
||||
|
27
src/test/ui/span/issue-42234-unknown-receiver-type.rs
Normal file
27
src/test/ui/span/issue-42234-unknown-receiver-type.rs
Normal file
@ -0,0 +1,27 @@
|
||||
// Copyright 2018 The Rust Project Developers. See the COPYRIGHT
|
||||
// file at the top-level directory of this distribution and at
|
||||
// http://rust-lang.org/COPYRIGHT.
|
||||
//
|
||||
// Licensed under the Apache License, Version 2.0 <LICENSE-APACHE or
|
||||
// http://www.apache.org/licenses/LICENSE-2.0> or the MIT license
|
||||
// <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your
|
||||
// option. This file may not be copied, modified, or distributed
|
||||
// except according to those terms.
|
||||
|
||||
// When the type of a method call's receiver is unknown, the span should point
|
||||
// to the receiver (and not the entire call, as was previously the case before
|
||||
// the fix of which this tests).
|
||||
|
||||
fn shines_a_beacon_through_the_darkness() {
|
||||
let x: Option<_> = None;
|
||||
x.unwrap().method_that_could_exist_on_some_type();
|
||||
//~^ ERROR 17:5: 17:15: the type of this value must be known in this context
|
||||
}
|
||||
|
||||
fn courier_to_des_moines_and_points_west(data: &[u32]) -> String {
|
||||
data.iter() //~ ERROR 22:5: 23:20: the type of this value must be known in this context
|
||||
.sum::<_>()
|
||||
.to_string()
|
||||
}
|
||||
|
||||
fn main() {}
|
15
src/test/ui/span/issue-42234-unknown-receiver-type.stderr
Normal file
15
src/test/ui/span/issue-42234-unknown-receiver-type.stderr
Normal file
@ -0,0 +1,15 @@
|
||||
error[E0619]: the type of this value must be known in this context
|
||||
--> $DIR/issue-42234-unknown-receiver-type.rs:17:5
|
||||
|
|
||||
17 | x.unwrap().method_that_could_exist_on_some_type();
|
||||
| ^^^^^^^^^^
|
||||
|
||||
error[E0619]: the type of this value must be known in this context
|
||||
--> $DIR/issue-42234-unknown-receiver-type.rs:22:5
|
||||
|
|
||||
22 | / data.iter() //~ ERROR 22:5: 23:20: the type of this value must be known in this context
|
||||
23 | | .sum::<_>()
|
||||
| |___________________^
|
||||
|
||||
error: aborting due to 2 previous errors
|
||||
|
Loading…
Reference in New Issue
Block a user