Skip to content

Commit

Permalink
Auto merge of #46761 - zackmdavis:concerning_incorrect_suggestions_fo…
Browse files Browse the repository at this point in the history
…r_referencing_a_cast, r=estebank

in which suggestions to borrow casts or binary expressions are rectified

 resolves #46756

r? @estebank
  • Loading branch information
bors committed Dec 17, 2017
2 parents 1b1c792 + 73a9019 commit 3537658
Show file tree
Hide file tree
Showing 3 changed files with 56 additions and 2 deletions.
8 changes: 6 additions & 2 deletions src/librustc_typeck/check/demand.rs
Original file line number Diff line number Diff line change
Expand Up @@ -260,12 +260,16 @@ impl<'a, 'gcx, 'tcx> FnCtxt<'a, 'gcx, 'tcx> {
// Use the callsite's span if this is a macro call. #41858
let sp = self.sess().codemap().call_span_if_macro(expr.span);
if let Ok(src) = self.tcx.sess.codemap().span_to_snippet(sp) {
let sugg_expr = match expr.node { // parenthesize if needed (Issue #46756)
hir::ExprCast(_, _) | hir::ExprBinary(_, _, _) => format!("({})", src),
_ => src,
};
return Some(match mutability.mutbl {
hir::Mutability::MutMutable => {
("consider mutably borrowing here", format!("&mut {}", src))
("consider mutably borrowing here", format!("&mut {}", sugg_expr))
}
hir::Mutability::MutImmutable => {
("consider borrowing here", format!("&{}", src))
("consider borrowing here", format!("&{}", sugg_expr))
}
});
}
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
// Copyright 2017 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.

#![allow(unused)]

fn light_flows_our_war_of_mocking_words(and_yet: &usize) -> usize {
and_yet + 1
}

fn main() {
let behold: isize = 2;
let with_tears: usize = 3;
light_flows_our_war_of_mocking_words(behold as usize);
//~^ ERROR mismatched types [E0308]
light_flows_our_war_of_mocking_words(with_tears + 4);
//~^ ERROR mismatched types [E0308]
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
error[E0308]: mismatched types
--> $DIR/issue-46756-consider-borrowing-cast-or-binexpr.rs:20:42
|
20 | light_flows_our_war_of_mocking_words(behold as usize);
| ^^^^^^^^^^^^^^^
| |
| expected &usize, found usize
| help: consider borrowing here: `&(behold as usize)`
|
= note: expected type `&usize`
found type `usize`

error[E0308]: mismatched types
--> $DIR/issue-46756-consider-borrowing-cast-or-binexpr.rs:22:42
|
22 | light_flows_our_war_of_mocking_words(with_tears + 4);
| ^^^^^^^^^^^^^^
| |
| expected &usize, found usize
| help: consider borrowing here: `&(with_tears + 4)`
|
= note: expected type `&usize`
found type `usize`

error: aborting due to 2 previous errors

0 comments on commit 3537658

Please sign in to comment.