diff options
| author | David Renshaw <dwrenshaw@gmail.com> | 2020-04-12 11:36:37 -0400 |
|---|---|---|
| committer | David Renshaw <dwrenshaw@gmail.com> | 2020-04-12 11:36:37 -0400 |
| commit | 57ed3d378d2430b0db296c3b37a81e69cca76e8c (patch) | |
| tree | 67c9f9af9243d21dfc198541244532bb9aaae629 | |
| parent | 32fb4dcdd7a57683a639a0959442711d0fd123bc (diff) | |
| download | rust-57ed3d378d2430b0db296c3b37a81e69cca76e8c.tar.gz rust-57ed3d378d2430b0db296c3b37a81e69cca76e8c.zip | |
fix issue 69130
| -rw-r--r-- | src/librustc_errors/lib.rs | 5 | ||||
| -rw-r--r-- | src/test/ui/consts/miri_unleashed/mutable_const2.stderr | 2 | ||||
| -rw-r--r-- | src/test/ui/issues/issue-69130.rs | 7 | ||||
| -rw-r--r-- | src/test/ui/issues/issue-69130.stderr | 21 |
4 files changed, 33 insertions, 2 deletions
diff --git a/src/librustc_errors/lib.rs b/src/librustc_errors/lib.rs index 55eb9fd566d..151241fdb0b 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 1699223f74f..39027dd2b41 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 00000000000..9552e8ec2a8 --- /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 00000000000..a4700a5ed1d --- /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`. |
