about summary refs log tree commit diff
diff options
context:
space:
mode:
-rw-r--r--compiler/rustc_hir_typeck/src/fn_ctxt/suggestions.rs39
-rw-r--r--compiler/rustc_infer/src/infer/error_reporting/mod.rs2
-rw-r--r--compiler/rustc_infer/src/infer/error_reporting/suggest.rs10
-rw-r--r--tests/ui/inference/stmts-as-exp-105431.rs (renamed from tests/ui/inference/issue-105431-stmts-as-exp.rs)0
-rw-r--r--tests/ui/inference/stmts-as-exp-105431.stderr (renamed from tests/ui/inference/issue-105431-stmts-as-exp.stderr)18
5 files changed, 15 insertions, 54 deletions
diff --git a/compiler/rustc_hir_typeck/src/fn_ctxt/suggestions.rs b/compiler/rustc_hir_typeck/src/fn_ctxt/suggestions.rs
index d5161b00fbc..809102557ac 100644
--- a/compiler/rustc_hir_typeck/src/fn_ctxt/suggestions.rs
+++ b/compiler/rustc_hir_typeck/src/fn_ctxt/suggestions.rs
@@ -1791,45 +1791,6 @@ impl<'a, 'tcx> FnCtxt<'a, 'tcx> {
         }
     }
 
-    /// A common error is to add an extra semicolon:
-    ///
-    /// ```compile_fail,E0308
-    /// fn foo() -> usize {
-    ///     22;
-    /// }
-    /// ```
-    ///
-    /// This routine checks if the final statement in a block is an
-    /// expression with an explicit semicolon whose type is compatible
-    /// with `expected_ty`. If so, it suggests removing the semicolon.
-    pub(crate) fn consider_removing_semicolon(
-        &self,
-        blk: &'tcx hir::Block<'tcx>,
-        expected_ty: Ty<'tcx>,
-        err: &mut Diag<'_>,
-    ) -> bool {
-        if let Some((span_semi, boxed)) = self.err_ctxt().could_remove_semicolon(blk, expected_ty) {
-            if let StatementAsExpression::NeedsBoxing = boxed {
-                err.span_suggestion_verbose(
-                    span_semi,
-                    "consider removing this semicolon and boxing the expression",
-                    "",
-                    Applicability::HasPlaceholders,
-                );
-            } else {
-                err.span_suggestion_short(
-                    span_semi,
-                    "remove this semicolon to return this value",
-                    "",
-                    Applicability::MachineApplicable,
-                );
-            }
-            true
-        } else {
-            false
-        }
-    }
-
     pub(crate) fn is_field_suggestable(
         &self,
         field: &ty::FieldDef,
diff --git a/compiler/rustc_infer/src/infer/error_reporting/mod.rs b/compiler/rustc_infer/src/infer/error_reporting/mod.rs
index 6bb8c119942..e19879ae06d 100644
--- a/compiler/rustc_infer/src/infer/error_reporting/mod.rs
+++ b/compiler/rustc_infer/src/infer/error_reporting/mod.rs
@@ -1976,7 +1976,7 @@ impl<'tcx> TypeErrCtxt<'_, 'tcx> {
                 self.suggest_accessing_field_where_appropriate(cause, &exp_found, diag);
                 self.suggest_await_on_expect_found(cause, span, &exp_found, diag);
                 self.suggest_function_pointers(cause, span, &exp_found, diag);
-                self.suggest_for_statments_as_exp(cause, &exp_found, diag);
+                self.suggest_turning_stmt_into_expr(cause, &exp_found, diag);
             }
         }
 
diff --git a/compiler/rustc_infer/src/infer/error_reporting/suggest.rs b/compiler/rustc_infer/src/infer/error_reporting/suggest.rs
index be2437bfd60..472dab639d5 100644
--- a/compiler/rustc_infer/src/infer/error_reporting/suggest.rs
+++ b/compiler/rustc_infer/src/infer/error_reporting/suggest.rs
@@ -298,11 +298,11 @@ impl<'tcx> TypeErrCtxt<'_, 'tcx> {
         }
     }
 
-    pub(super) fn suggest_for_statments_as_exp(
+    pub(super) fn suggest_turning_stmt_into_expr(
         &self,
         cause: &ObligationCause<'tcx>,
         exp_found: &ty::error::ExpectedFound<Ty<'tcx>>,
-        diag: &mut Diagnostic,
+        diag: &mut Diag<'_>,
     ) {
         let ty::error::ExpectedFound { expected, found } = exp_found;
         if !found.peel_refs().is_unit() {
@@ -365,18 +365,18 @@ impl<'tcx> TypeErrCtxt<'_, 'tcx> {
         &self,
         blk: &'tcx hir::Block<'tcx>,
         expected_ty: Ty<'tcx>,
-        err: &mut Diagnostic,
+        diag: &mut Diag<'_>,
     ) -> bool {
         if let Some((span_semi, boxed)) = self.could_remove_semicolon(blk, expected_ty) {
             if let StatementAsExpression::NeedsBoxing = boxed {
-                err.span_suggestion_verbose(
+                diag.span_suggestion_verbose(
                     span_semi,
                     "consider removing this semicolon and boxing the expression",
                     "",
                     Applicability::HasPlaceholders,
                 );
             } else {
-                err.span_suggestion_short(
+                diag.span_suggestion_short(
                     span_semi,
                     "remove this semicolon to return this value",
                     "",
diff --git a/tests/ui/inference/issue-105431-stmts-as-exp.rs b/tests/ui/inference/stmts-as-exp-105431.rs
index b5adb4a2b66..b5adb4a2b66 100644
--- a/tests/ui/inference/issue-105431-stmts-as-exp.rs
+++ b/tests/ui/inference/stmts-as-exp-105431.rs
diff --git a/tests/ui/inference/issue-105431-stmts-as-exp.stderr b/tests/ui/inference/stmts-as-exp-105431.stderr
index 2878d602ec5..f3da04b39a3 100644
--- a/tests/ui/inference/issue-105431-stmts-as-exp.stderr
+++ b/tests/ui/inference/stmts-as-exp-105431.stderr
@@ -1,5 +1,5 @@
 error[E0308]: mismatched types
-  --> $DIR/issue-105431-stmts-as-exp.rs:11:5
+  --> $DIR/stmts-as-exp-105431.rs:11:5
    |
 LL | fn test_if() -> i32 {
    |                 --- expected `i32` because of return type
@@ -19,7 +19,7 @@ LL +         4
    |
 
 error[E0308]: mismatched types
-  --> $DIR/issue-105431-stmts-as-exp.rs:15:13
+  --> $DIR/stmts-as-exp-105431.rs:15:13
    |
 LL |       if true {
    |  _____________^
@@ -30,7 +30,7 @@ LL | |     }
    | |_____^ expected `i32`, found `()`
 
 error[E0308]: mismatched types
-  --> $DIR/issue-105431-stmts-as-exp.rs:19:10
+  --> $DIR/stmts-as-exp-105431.rs:19:10
    |
 LL |       else {
    |  __________^
@@ -40,7 +40,7 @@ LL | |     }
    | |_____^ expected `i32`, found `()`
 
 error[E0308]: mismatched types
-  --> $DIR/issue-105431-stmts-as-exp.rs:30:5
+  --> $DIR/stmts-as-exp-105431.rs:30:5
    |
 LL | fn test_match() -> i32 {
    |                    --- expected `i32` because of return type
@@ -60,7 +60,7 @@ LL +         _ => { 2 }
    |
 
 error[E0308]: mismatched types
-  --> $DIR/issue-105431-stmts-as-exp.rs:36:14
+  --> $DIR/stmts-as-exp-105431.rs:36:14
    |
 LL |         1 => { 1; }
    |              ^^^-^^
@@ -69,7 +69,7 @@ LL |         1 => { 1; }
    |              expected `i32`, found `()`
 
 error[E0308]: mismatched types
-  --> $DIR/issue-105431-stmts-as-exp.rs:37:14
+  --> $DIR/stmts-as-exp-105431.rs:37:14
    |
 LL |         _ => { 2; }
    |              ^^^-^^
@@ -78,7 +78,7 @@ LL |         _ => { 2; }
    |              expected `i32`, found `()`
 
 error[E0308]: `match` arms have incompatible types
-  --> $DIR/issue-105431-stmts-as-exp.rs:45:16
+  --> $DIR/stmts-as-exp-105431.rs:45:16
    |
 LL |       let res = match v {
    |  _______________-
@@ -93,7 +93,7 @@ LL | |     };
    | |_____- `match` arms have incompatible types
 
 error[E0308]: mismatched types
-  --> $DIR/issue-105431-stmts-as-exp.rs:59:5
+  --> $DIR/stmts-as-exp-105431.rs:59:5
    |
 LL | fn test_if_match_mixed() -> i32 {
    |                             --- expected `i32` because of return type
@@ -113,7 +113,7 @@ LL +         }
    |
 
 error[E0308]: mismatched types
-  --> $DIR/issue-105431-stmts-as-exp.rs:72:5
+  --> $DIR/stmts-as-exp-105431.rs:72:5
    |
 LL | fn test_if_match_mixed_failed() -> i32 {
    |                                    --- expected `i32` because of return type