diff options
| author | wangxiangqing <wangxiangqing@bytedance.com> | 2019-10-06 12:03:53 +0800 |
|---|---|---|
| committer | wangxiangqing <wangxiangqing@bytedance.com> | 2019-10-06 12:03:53 +0800 |
| commit | 0b0aeaca43bc457db2be70114fa7c6ab7925fd78 (patch) | |
| tree | ebca3b007477c5a5bb6a5e7a9ff6dbb842daa27b | |
| parent | 7870050796e5904a0fc85ecbe6fa6dde1cfe0c91 (diff) | |
| download | rust-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.rs | 6 | ||||
| -rw-r--r-- | src/librustc_typeck/check/expr.rs | 2 |
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, |
