From 57ed3d378d2430b0db296c3b37a81e69cca76e8c Mon Sep 17 00:00:00 2001 From: David Renshaw Date: Sun, 12 Apr 2020 11:36:37 -0400 Subject: [PATCH] fix issue 69130 --- src/librustc_errors/lib.rs | 5 ++++- .../miri_unleashed/mutable_const2.stderr | 2 +- src/test/ui/issues/issue-69130.rs | 7 +++++++ src/test/ui/issues/issue-69130.stderr | 21 +++++++++++++++++++ 4 files changed, 33 insertions(+), 2 deletions(-) create mode 100644 src/test/ui/issues/issue-69130.rs create mode 100644 src/test/ui/issues/issue-69130.stderr diff --git a/src/librustc_errors/lib.rs b/src/librustc_errors/lib.rs index 55eb9fd566d87..151241fdb0b5f 100644 --- a/src/librustc_errors/lib.rs +++ b/src/librustc_errors/lib.rs @@ -231,7 +231,10 @@ impl CodeSuggestion { } } if let Some(cur_line) = sf.get_line(cur_lo.line - 1) { - let end = std::cmp::min(cur_line.len(), cur_lo.col.to_usize()); + let end = match cur_line.char_indices().nth(cur_lo.col.to_usize()) { + Some((i, _)) => i, + None => cur_line.len(), + }; buf.push_str(&cur_line[..end]); } } diff --git a/src/test/ui/consts/miri_unleashed/mutable_const2.stderr b/src/test/ui/consts/miri_unleashed/mutable_const2.stderr index 1699223f74f43..39027dd2b4103 100644 --- a/src/test/ui/consts/miri_unleashed/mutable_const2.stderr +++ b/src/test/ui/consts/miri_unleashed/mutable_const2.stderr @@ -12,7 +12,7 @@ error: internal compiler error: mutable allocation in constant LL | const MUTABLE_BEHIND_RAW: *mut i32 = &UnsafeCell::new(42) as *const _ as *mut _; | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -thread 'rustc' panicked at 'no errors encountered even though `delay_span_bug` issued', src/librustc_errors/lib.rs:363:17 +thread 'rustc' panicked at 'no errors encountered even though `delay_span_bug` issued', src/librustc_errors/lib.rs:366:17 note: run with `RUST_BACKTRACE=1` environment variable to display a backtrace error: internal compiler error: unexpected panic diff --git a/src/test/ui/issues/issue-69130.rs b/src/test/ui/issues/issue-69130.rs new file mode 100644 index 0000000000000..9552e8ec2a876 --- /dev/null +++ b/src/test/ui/issues/issue-69130.rs @@ -0,0 +1,7 @@ +// Issue 69130: character indexing bug in rustc_errors::CodeSuggestion::splice_lines(). + +enum F { +M (§& u8)} +//~^ ERROR unknown start of token +//~| missing lifetime specifier +fn main() {} diff --git a/src/test/ui/issues/issue-69130.stderr b/src/test/ui/issues/issue-69130.stderr new file mode 100644 index 0000000000000..a4700a5ed1da0 --- /dev/null +++ b/src/test/ui/issues/issue-69130.stderr @@ -0,0 +1,21 @@ +error: unknown start of token: \u{a7} + --> $DIR/issue-69130.rs:4:4 + | +LL | M (§& u8)} + | ^ + +error[E0106]: missing lifetime specifier + --> $DIR/issue-69130.rs:4:5 + | +LL | M (§& u8)} + | ^ expected named lifetime parameter + | +help: consider introducing a named lifetime parameter + | +LL | enum F<'a> { +LL | M (§&'a u8)} + | + +error: aborting due to 2 previous errors + +For more information about this error, try `rustc --explain E0106`.