summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--compiler/rustc_lexer/src/unescape.rs6
-rw-r--r--compiler/rustc_parse/locales/en-US.ftl2
-rw-r--r--tests/ui/str/str-escape.rs22
-rw-r--r--tests/ui/str/str-escape.stderr20
4 files changed, 40 insertions, 10 deletions
diff --git a/compiler/rustc_lexer/src/unescape.rs b/compiler/rustc_lexer/src/unescape.rs
index 8507ca9d89e..bb4d91247b8 100644
--- a/compiler/rustc_lexer/src/unescape.rs
+++ b/compiler/rustc_lexer/src/unescape.rs
@@ -298,10 +298,10 @@ where
}
let tail = &tail[first_non_space..];
if let Some(c) = tail.chars().nth(0) {
- // For error reporting, we would like the span to contain the character that was not
- // skipped. The +1 is necessary to account for the leading \ that started the escape.
- let end = start + first_non_space + c.len_utf8() + 1;
if c.is_whitespace() {
+ // For error reporting, we would like the span to contain the character that was not
+ // skipped. The +1 is necessary to account for the leading \ that started the escape.
+ let end = start + first_non_space + c.len_utf8() + 1;
callback(start..end, Err(EscapeError::UnskippedWhitespaceWarning));
}
}
diff --git a/compiler/rustc_parse/locales/en-US.ftl b/compiler/rustc_parse/locales/en-US.ftl
index e76e91fc1b1..d8e816aa115 100644
--- a/compiler/rustc_parse/locales/en-US.ftl
+++ b/compiler/rustc_parse/locales/en-US.ftl
@@ -710,7 +710,7 @@ parse_zero_chars = empty character literal
parse_lone_slash = invalid trailing slash in literal
.label = {parse_lone_slash}
-parse_unskipped_whitespace = non-ASCII whitespace symbol '{$ch}' is not skipped
+parse_unskipped_whitespace = whitespace symbol '{$ch}' is not skipped
.label = {parse_unskipped_whitespace}
parse_multiple_skipped_lines = multiple lines skipped by escaped newline
diff --git a/tests/ui/str/str-escape.rs b/tests/ui/str/str-escape.rs
index 0264632fd24..10a72421f24 100644
--- a/tests/ui/str/str-escape.rs
+++ b/tests/ui/str/str-escape.rs
@@ -1,11 +1,31 @@
// check-pass
+// ignore-tidy-tab
+
fn main() {
let s = "\
";
//~^^^ WARNING multiple lines skipped by escaped newline
+ assert_eq!(s, "");
+
let s = "foo\
  bar
";
- //~^^^ WARNING non-ASCII whitespace symbol '\u{a0}' is not skipped
+ //~^^^ WARNING whitespace symbol '\u{a0}' is not skipped
+ assert_eq!(s, "foo  bar\n ");
+
+ let s = "a\
+ b";
+ assert_eq!(s, "ab");
+
+ let s = "a\
+ b";
+ assert_eq!(s, "ab");
+
+ let s = "a\
+ b";
+ //~^^ WARNING whitespace symbol '\u{c}' is not skipped
+ // '\x0c' is ASCII whitespace, but it may not need skipped
+ // discussion: https://github.com/rust-lang/rust/pull/108403
+ assert_eq!(s, "a\x0cb");
}
diff --git a/tests/ui/str/str-escape.stderr b/tests/ui/str/str-escape.stderr
index b2501f1a214..43b4f7e36f6 100644
--- a/tests/ui/str/str-escape.stderr
+++ b/tests/ui/str/str-escape.stderr
@@ -1,5 +1,5 @@
warning: multiple lines skipped by escaped newline
- --> $DIR/str-escape.rs:3:14
+ --> $DIR/str-escape.rs:5:14
|
LL | let s = "\
| ______________^
@@ -7,15 +7,25 @@ LL | |
LL | | ";
| |_____________^ skipping everything up to and including this point
-warning: non-ASCII whitespace symbol '\u{a0}' is not skipped
- --> $DIR/str-escape.rs:7:17
+warning: whitespace symbol '\u{a0}' is not skipped
+ --> $DIR/str-escape.rs:11:17
|
LL | let s = "foo\
| _________________^
LL | |   bar
- | | ^ non-ASCII whitespace symbol '\u{a0}' is not skipped
+ | | ^ whitespace symbol '\u{a0}' is not skipped
| |___|
|
-warning: 2 warnings emitted
+warning: whitespace symbol '\u{c}' is not skipped
+ --> $DIR/str-escape.rs:25:15
+ |
+LL | let s = "a\
+ | _______________^
+LL | | b";
+ | | ^- whitespace symbol '\u{c}' is not skipped
+ | |____|
+ |
+
+warning: 3 warnings emitted