about summary refs log tree commit diff
diff options
context:
space:
mode:
authorsinkuu <sinkuupump@gmail.com>2017-02-25 22:05:30 +0900
committersinkuu <sinkuupump@gmail.com>2017-02-25 22:11:54 +0900
commit8a64cf7fb72ca93608be19e13dd83c23168b17d7 (patch)
tree4bcc4af29089f1d1b0aa19989867094dfab7da51
parent08230775a026c955873ba557e624b7f665661f37 (diff)
downloadrust-8a64cf7fb72ca93608be19e13dd83c23168b17d7.tar.gz
rust-8a64cf7fb72ca93608be19e13dd83c23168b17d7.zip
Fix suggestion span error with a line containing non-ASCIIs
-rw-r--r--src/librustc_errors/lib.rs3
-rw-r--r--src/test/ui/span/suggestion-non-ascii.rs16
-rw-r--r--src/test/ui/span/suggestion-non-ascii.stderr11
3 files changed, 29 insertions, 1 deletions
diff --git a/src/librustc_errors/lib.rs b/src/librustc_errors/lib.rs
index d7bd5ed23c2..4c889dad8ca 100644
--- a/src/librustc_errors/lib.rs
+++ b/src/librustc_errors/lib.rs
@@ -90,7 +90,8 @@ impl CodeSuggestion {
                          hi_opt: Option<&Loc>) {
             let (lo, hi_opt) = (lo.col.to_usize(), hi_opt.map(|hi| hi.col.to_usize()));
             if let Some(line) = line_opt {
-                if line.len() > lo {
+                if let Some(lo) = line.char_indices().map(|(i, _)| i).nth(lo) {
+                    let hi_opt = hi_opt.and_then(|hi| line.char_indices().map(|(i, _)| i).nth(hi));
                     buf.push_str(match hi_opt {
                         Some(hi) => &line[lo..hi],
                         None => &line[lo..],
diff --git a/src/test/ui/span/suggestion-non-ascii.rs b/src/test/ui/span/suggestion-non-ascii.rs
new file mode 100644
index 00000000000..67dbe1dc7b5
--- /dev/null
+++ b/src/test/ui/span/suggestion-non-ascii.rs
@@ -0,0 +1,16 @@
+// Copyright 2017 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 tup = (1,);
+    println!("☃{}", tup[0]);
+}
+
diff --git a/src/test/ui/span/suggestion-non-ascii.stderr b/src/test/ui/span/suggestion-non-ascii.stderr
new file mode 100644
index 00000000000..385c211f393
--- /dev/null
+++ b/src/test/ui/span/suggestion-non-ascii.stderr
@@ -0,0 +1,11 @@
+error: cannot index a value of type `({integer},)`
+  --> $DIR/suggestion-non-ascii.rs:14:21
+   |
+14 |     println!("☃{}", tup[0]);
+   |                     ^^^^^^
+   |
+help: to access tuple elements, use tuple indexing syntax as shown
+   |     println!("☃{}", tup.0);
+
+error: aborting due to previous error
+