about summary refs log tree commit diff
diff options
context:
space:
mode:
authorAndy Russell <arussell123@gmail.com>2018-06-29 13:17:56 -0400
committerAndy Russell <arussell123@gmail.com>2018-06-29 13:51:35 -0400
commit28c4813920545dd3c15b1ad2f8ffdbe8c4c5bd52 (patch)
tree494dce37bf94d3d51b7c5ecb7b5d99ca71854537
parentab8a67c12adc6ba84b6143a539640d5962ef6cbe (diff)
downloadrust-28c4813920545dd3c15b1ad2f8ffdbe8c4c5bd52.tar.gz
rust-28c4813920545dd3c15b1ad2f8ffdbe8c4c5bd52.zip
use literal span for concrete type suggestion
Fixes #51874.
-rw-r--r--src/librustc_typeck/check/method/suggest.rs7
-rw-r--r--src/test/ui/issue-51874.rs13
-rw-r--r--src/test/ui/issue-51874.stderr13
3 files changed, 29 insertions, 4 deletions
diff --git a/src/librustc_typeck/check/method/suggest.rs b/src/librustc_typeck/check/method/suggest.rs
index 35d237d94de..68c71f4ce90 100644
--- a/src/librustc_typeck/check/method/suggest.rs
+++ b/src/librustc_typeck/check/method/suggest.rs
@@ -245,12 +245,11 @@ impl<'a, 'gcx, 'tcx> FnCtxt<'a, 'gcx, 'tcx> {
                             "f32"
                         };
                         match expr.node {
-                            hir::ExprLit(_) => {  // numeric literal
-                                let snippet = tcx.sess.codemap().span_to_snippet(expr.span)
+                            hir::ExprLit(ref lit) => {  // numeric literal
+                                let snippet = tcx.sess.codemap().span_to_snippet(lit.span)
                                     .unwrap_or("<numeric literal>".to_string());
-                                // FIXME: use the literal for missing snippet
 
-                                err.span_suggestion(expr.span,
+                                err.span_suggestion(lit.span,
                                                     &format!("you must specify a concrete type for \
                                                               this numeric value, like `{}`",
                                                              concrete_type),
diff --git a/src/test/ui/issue-51874.rs b/src/test/ui/issue-51874.rs
new file mode 100644
index 00000000000..63425274d4c
--- /dev/null
+++ b/src/test/ui/issue-51874.rs
@@ -0,0 +1,13 @@
+// Copyright 2018 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.
+
+fn main() {
+    let a = (1.0).pow(1.0); //~ ERROR can't call method `pow` on ambiguous numeric type
+}
diff --git a/src/test/ui/issue-51874.stderr b/src/test/ui/issue-51874.stderr
new file mode 100644
index 00000000000..86746453571
--- /dev/null
+++ b/src/test/ui/issue-51874.stderr
@@ -0,0 +1,13 @@
+error[E0689]: can't call method `pow` on ambiguous numeric type `{float}`
+  --> $DIR/issue-51874.rs:12:19
+   |
+LL |     let a = (1.0).pow(1.0); //~ ERROR can't call method `pow` on ambiguous numeric type
+   |                   ^^^
+help: you must specify a concrete type for this numeric value, like `f32`
+   |
+LL |     let a = (1.0_f32).pow(1.0); //~ ERROR can't call method `pow` on ambiguous numeric type
+   |              ^^^^^^^
+
+error: aborting due to previous error
+
+For more information about this error, try `rustc --explain E0689`.