From 2195fa6a9bad1e95511875c93c34b55fe7ae55fa Mon Sep 17 00:00:00 2001
From: bohan <bohan-zhang@foxmail.com>
Date: Thu, 3 Aug 2023 16:44:02 +0800
Subject: [PATCH] fix the span in the suggestion of remove question mark

---
 .../src/infer/error_reporting/mod.rs          |  2 +-
 .../remove-question-symbol-with-paren.rs      |  9 ++++++++
 .../remove-question-symbol-with-paren.stderr  | 22 +++++++++++++++++++
 3 files changed, 32 insertions(+), 1 deletion(-)
 create mode 100644 tests/ui/suggestions/remove-question-symbol-with-paren.rs
 create mode 100644 tests/ui/suggestions/remove-question-symbol-with-paren.stderr

diff --git a/compiler/rustc_infer/src/infer/error_reporting/mod.rs b/compiler/rustc_infer/src/infer/error_reporting/mod.rs
index 25077f9bb97ee..7739cf1ee05b0 100644
--- a/compiler/rustc_infer/src/infer/error_reporting/mod.rs
+++ b/compiler/rustc_infer/src/infer/error_reporting/mod.rs
@@ -764,7 +764,7 @@ impl<'tcx> TypeErrCtxt<'_, 'tcx> {
                             Some(ty) if expected == ty => {
                                 let source_map = self.tcx.sess.source_map();
                                 err.span_suggestion(
-                                    source_map.end_point(cause.span),
+                                    source_map.end_point(cause.span()),
                                     "try removing this `?`",
                                     "",
                                     Applicability::MachineApplicable,
diff --git a/tests/ui/suggestions/remove-question-symbol-with-paren.rs b/tests/ui/suggestions/remove-question-symbol-with-paren.rs
new file mode 100644
index 0000000000000..c522793dbcb7e
--- /dev/null
+++ b/tests/ui/suggestions/remove-question-symbol-with-paren.rs
@@ -0,0 +1,9 @@
+// https://github.com/rust-lang/rust/issues/114392
+
+fn foo() -> Option<()> {
+    let x = Some(());
+    (x?)
+    //~^ ERROR `?` operator has incompatible types
+}
+
+fn main() {}
diff --git a/tests/ui/suggestions/remove-question-symbol-with-paren.stderr b/tests/ui/suggestions/remove-question-symbol-with-paren.stderr
new file mode 100644
index 0000000000000..39e35f733a1d2
--- /dev/null
+++ b/tests/ui/suggestions/remove-question-symbol-with-paren.stderr
@@ -0,0 +1,22 @@
+error[E0308]: `?` operator has incompatible types
+  --> $DIR/remove-question-symbol-with-paren.rs:5:6
+   |
+LL |     (x?)
+   |      ^^ expected `Option<()>`, found `()`
+   |
+   = note: `?` operator cannot convert from `()` to `Option<()>`
+   = note:   expected enum `Option<()>`
+           found unit type `()`
+help: try removing this `?`
+   |
+LL -     (x?)
+LL +     (x)
+   |
+help: try wrapping the expression in `Some`
+   |
+LL |     (Some(x?))
+   |      +++++  +
+
+error: aborting due to previous error
+
+For more information about this error, try `rustc --explain E0308`.