Skip to content

Commit

Permalink
tests: add regression test for #128845
Browse files Browse the repository at this point in the history
For codepoint boundary assertion triggered by a let stmt compound
assignment removal suggestion when encountering recovered multi-byte
compound ops.

Issue: <#128845>
  • Loading branch information
jieyouxu committed Aug 9, 2024
1 parent fac7753 commit 92520a9
Show file tree
Hide file tree
Showing 2 changed files with 42 additions and 0 deletions.
16 changes: 16 additions & 0 deletions tests/ui/parser/suggest-remove-compount-assign-let-ice.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
//! Previously we would try to issue a suggestion for `let x <op>= 1`, i.e. a compound assignment
//! within a `let` binding, to remove the `<op>`. The suggestion code unfortunately incorrectly
//! assumed that the `<op>` is an exactly-1-byte ASCII character, but this assumption is incorrect
//! because we also recover Unicode-confusables like `➖=` as `-=`. In this example, the suggestion
//! code used a `+ BytePos(1)` to calculate the span of the `<op>` codepoint that looks like `-` but
//! the mult-byte Unicode look-alike would cause the suggested removal span to be inside a
//! multi-byte codepoint boundary, triggering a codepoint boundary assertion.
//!
//! issue: rust-lang/rust#128845

fn main() {
// Adapted from #128845 but with irrelevant components removed and simplified.
let x ➖= 1;
//~^ ERROR unknown start of token: \u{2796}
//~| ERROR: can't reassign to an uninitialized variable
}
26 changes: 26 additions & 0 deletions tests/ui/parser/suggest-remove-compount-assign-let-ice.stderr
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
error: unknown start of token: \u{2796}
--> $DIR/suggest-remove-compount-assign-let-ice.rs:13:11
|
LL | let x ➖= 1;
| ^^
|
help: Unicode character '➖' (Heavy Minus Sign) looks like '-' (Minus/Hyphen), but it is not
|
LL | let x -= 1;
| ~

error: can't reassign to an uninitialized variable
--> $DIR/suggest-remove-compount-assign-let-ice.rs:13:11
|
LL | let x ➖= 1;
| ^^^
|
= help: if you meant to overwrite, remove the `let` binding
help: initialize the variable
|
LL - let x ➖= 1;
LL + let x = 1;
|

error: aborting due to 2 previous errors

0 comments on commit 92520a9

Please sign in to comment.