Skip to content

Commit

Permalink
Rollup merge of rust-lang#62995 - estebank:issue-62973, r=varkor
Browse files Browse the repository at this point in the history
Avoid ICE when suggestion span is at Eof

Fix rust-lang#62973.
  • Loading branch information
Centril committed Jul 28, 2019
2 parents 2ac9b89 + 6263eb4 commit a3cae57
Show file tree
Hide file tree
Showing 4 changed files with 85 additions and 3 deletions.
3 changes: 2 additions & 1 deletion src/librustc_errors/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -226,7 +226,8 @@ impl CodeSuggestion {
}
}
if let Some(cur_line) = fm.get_line(cur_lo.line - 1) {
buf.push_str(&cur_line[..cur_lo.col.to_usize()]);
let end = std::cmp::min(cur_line.len(), cur_lo.col.to_usize());
buf.push_str(&cur_line[..end]);
}
}
buf.push_str(&part.snippet);
Expand Down
8 changes: 8 additions & 0 deletions src/test/ui/parser/issue-62973.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
// ignore-tidy-trailing-newlines
// error-pattern: aborting due to 6 previous errors

fn main() {}

fn p() { match s { v, E { [) {) }


61 changes: 61 additions & 0 deletions src/test/ui/parser/issue-62973.stderr
Original file line number Diff line number Diff line change
@@ -0,0 +1,61 @@
error: this file contains an un-closed delimiter
--> $DIR/issue-62973.rs:8:2
|
LL | fn p() { match s { v, E { [) {) }
| - - un-closed delimiter
| |
| un-closed delimiter
LL |
LL |
| ^

error: expected one of `,` or `}`, found `{`
--> $DIR/issue-62973.rs:6:25
|
LL | fn p() { match s { v, E { [) {) }
| - ^ expected one of `,` or `}` here
| |
| while parsing this struct

error: struct literals are not allowed here
--> $DIR/issue-62973.rs:6:16
|
LL | fn p() { match s { v, E { [) {) }
| ________________^
LL | |
LL | |
| |_^
help: surround the struct literal with parentheses
|
LL | fn p() { match (s { v, E { [) {) }
LL |
LL | )
|

error: expected one of `.`, `?`, `{`, or an operator, found `}`
--> $DIR/issue-62973.rs:8:1
|
LL | fn p() { match s { v, E { [) {) }
| ----- while parsing this match expression
LL |
LL |
| ^ expected one of `.`, `?`, `{`, or an operator here

error: incorrect close delimiter: `)`
--> $DIR/issue-62973.rs:6:28
|
LL | fn p() { match s { v, E { [) {) }
| -^ incorrect close delimiter
| |
| un-closed delimiter

error: incorrect close delimiter: `)`
--> $DIR/issue-62973.rs:6:31
|
LL | fn p() { match s { v, E { [) {) }
| -^ incorrect close delimiter
| |
| un-closed delimiter

error: aborting due to 6 previous errors

16 changes: 14 additions & 2 deletions src/tools/tidy/src/style.rs
Original file line number Diff line number Diff line change
Expand Up @@ -152,6 +152,8 @@ pub fn check(path: &Path, bad: &mut bool) {
let mut skip_file_length = contains_ignore_directive(can_contain, &contents, "filelength");
let mut skip_end_whitespace =
contains_ignore_directive(can_contain, &contents, "end-whitespace");
let mut skip_trailing_newlines =
contains_ignore_directive(can_contain, &contents, "trailing-newlines");
let mut skip_copyright = contains_ignore_directive(can_contain, &contents, "copyright");
let mut leading_new_lines = false;
let mut trailing_new_lines = 0;
Expand Down Expand Up @@ -214,10 +216,17 @@ pub fn check(path: &Path, bad: &mut bool) {
if leading_new_lines {
tidy_error!(bad, "{}: leading newline", file.display());
}
let mut err = |msg: &str| {
tidy_error!(bad, "{}: {}", file.display(), msg);
};
match trailing_new_lines {
0 => tidy_error!(bad, "{}: missing trailing newline", file.display()),
0 => suppressible_tidy_err!(err, skip_trailing_newlines, "missing trailing newline"),
1 => {}
n => tidy_error!(bad, "{}: too many trailing newlines ({})", file.display(), n),
n => suppressible_tidy_err!(
err,
skip_trailing_newlines,
&format!("too many trailing newlines ({})", n)
),
};
if lines > LINES {
let mut err = |_| {
Expand Down Expand Up @@ -247,6 +256,9 @@ pub fn check(path: &Path, bad: &mut bool) {
if let Directive::Ignore(false) = skip_end_whitespace {
tidy_error!(bad, "{}: ignoring trailing whitespace unnecessarily", file.display());
}
if let Directive::Ignore(false) = skip_trailing_newlines {
tidy_error!(bad, "{}: ignoring trailing newlines unnecessarily", file.display());
}
if let Directive::Ignore(false) = skip_copyright {
tidy_error!(bad, "{}: ignoring copyright unnecessarily", file.display());
}
Expand Down

0 comments on commit a3cae57

Please sign in to comment.