about summary refs log tree commit diff
diff options
context:
space:
mode:
authorwangxiangqing <wangxiangqing@bytedance.com>2019-10-06 12:03:53 +0800
committerwangxiangqing <wangxiangqing@bytedance.com>2019-10-06 12:03:53 +0800
commit0b0aeaca43bc457db2be70114fa7c6ab7925fd78 (patch)
treeebca3b007477c5a5bb6a5e7a9ff6dbb842daa27b
parent7870050796e5904a0fc85ecbe6fa6dde1cfe0c91 (diff)
downloadrust-0b0aeaca43bc457db2be70114fa7c6ab7925fd78.tar.gz
rust-0b0aeaca43bc457db2be70114fa7c6ab7925fd78.zip
Suggest dereferencing boolean reference when used in 'if' or 'while'
Change-Id: I0c5c4d767be2647e6f017ae7bf83558c56dbca97
-rw-r--r--src/librustc_typeck/check/demand.rs6
-rw-r--r--src/librustc_typeck/check/expr.rs2
2 files changed, 7 insertions, 1 deletions
diff --git a/src/librustc_typeck/check/demand.rs b/src/librustc_typeck/check/demand.rs
index 2ea0afb1793..78bd4508e21 100644
--- a/src/librustc_typeck/check/demand.rs
+++ b/src/librustc_typeck/check/demand.rs
@@ -349,7 +349,11 @@ impl<'a, 'tcx> FnCtxt<'a, 'tcx> {
 
         // If the span is from a macro, then it's hard to extract the text
         // and make a good suggestion, so don't bother.
-        let is_macro = sp.from_expansion();
+        let is_desugaring = match sp.desugaring_kind() {
+            Some(k) => sp.is_desugaring(k),
+            None => false
+        };
+        let is_macro = sp.from_expansion() && !is_desugaring;
 
         match (&expr.kind, &expected.kind, &checked_ty.kind) {
             (_, &ty::Ref(_, exp, _), &ty::Ref(_, check, _)) => match (&exp.kind, &check.kind) {
diff --git a/src/librustc_typeck/check/expr.rs b/src/librustc_typeck/check/expr.rs
index 7a6fe9560fb..aa26c74967a 100644
--- a/src/librustc_typeck/check/expr.rs
+++ b/src/librustc_typeck/check/expr.rs
@@ -87,6 +87,8 @@ impl<'a, 'tcx> FnCtxt<'a, 'tcx> {
         }
 
         if let Some(mut err) = self.demand_suptype_diag(expr.span, expected_ty, ty) {
+            self.suggest_ref_or_into(&mut err, expr, expected_ty, ty);
+
             let expr = match &expr.kind {
                 ExprKind::DropTemps(expr) => expr,
                 _ => expr,