about summary refs log tree commit diff
diff options
context:
space:
mode:
authorEsteban Kuber <esteban@kuber.com.ar>2021-09-14 11:39:49 +0000
committerEsteban Kuber <esteban@kuber.com.ar>2021-11-23 20:37:24 +0000
commit5402e4833ff1a23218ae77456488d873e261591a (patch)
tree7a3a4c0da03c694a15a415967f7807dfaf274afa
parent38979a3ba167e6937dee5e434f66aded57d23926 (diff)
downloadrust-5402e4833ff1a23218ae77456488d873e261591a.tar.gz
rust-5402e4833ff1a23218ae77456488d873e261591a.zip
Sort `FxHashSet`'s contents before emitting errors for consistent output
-rw-r--r--compiler/rustc_interface/src/passes.rs5
-rw-r--r--src/test/ui/parser/emoji-identifiers.stderr40
2 files changed, 24 insertions, 21 deletions
diff --git a/compiler/rustc_interface/src/passes.rs b/compiler/rustc_interface/src/passes.rs
index 67b5833ca47..d3917dfb14a 100644
--- a/compiler/rustc_interface/src/passes.rs
+++ b/compiler/rustc_interface/src/passes.rs
@@ -452,7 +452,10 @@ pub fn configure_and_expand(
 
     // Gate identifiers containing invalid Unicode codepoints that were recovered during lexing.
     sess.parse_sess.bad_unicode_identifiers.with_lock(|identifiers| {
-        for (ident, spans) in identifiers.drain() {
+        let mut identifiers: Vec<_> = identifiers.drain().collect();
+        identifiers.sort_by_key(|&(key, _)| key);
+        for (ident, mut spans) in identifiers.into_iter() {
+            spans.sort();
             sess.diagnostic().span_err(
                 MultiSpan::from(spans),
                 &format!("identifiers cannot contain emoji: `{}`", ident),
diff --git a/src/test/ui/parser/emoji-identifiers.stderr b/src/test/ui/parser/emoji-identifiers.stderr
index a69a9c542d6..5f9263c4c13 100644
--- a/src/test/ui/parser/emoji-identifiers.stderr
+++ b/src/test/ui/parser/emoji-identifiers.stderr
@@ -18,23 +18,11 @@ LL | fn i_like_to_๐Ÿ˜…_a_lot() -> ๐Ÿ‘€ {
 LL |     let _ = i_like_to_๐Ÿ˜„_a_lot() โž– 4;
    |             ^^^^^^^^^^^^^^^^^^ help: a function with a similar name exists: `i_like_to_๐Ÿ˜…_a_lot`
 
-error: identifiers cannot contain emoji: `i_like_to_๐Ÿ˜„_a_lot`
-  --> $DIR/emoji-identifiers.rs:13:13
-   |
-LL |     let _ = i_like_to_๐Ÿ˜„_a_lot() โž– 4;
-   |             ^^^^^^^^^^^^^^^^^^
-
-error: identifiers cannot contain emoji: `full_of_โœจ`
-  --> $DIR/emoji-identifiers.rs:4:8
-   |
-LL |     fn full_of_โœจ() -> ๐Ÿ‘€ {
-   |        ^^^^^^^^^^
-
-error: identifiers cannot contain emoji: `full_ofโœจ`
-  --> $DIR/emoji-identifiers.rs:9:8
+error: identifiers cannot contain emoji: `ABig๐Ÿ‘ฉ๐Ÿ‘ฉ๐Ÿ‘ง๐Ÿ‘งFamily`
+  --> $DIR/emoji-identifiers.rs:1:8
    |
-LL |     ๐Ÿ‘€::full_ofโœจ()
-   |         ^^^^^^^^^
+LL | struct ABig๐Ÿ‘ฉ๐Ÿ‘ฉ๐Ÿ‘ง๐Ÿ‘งFamily;
+   |        ^^^^^^^^^^^^^^^^^^
 
 error: identifiers cannot contain emoji: `๐Ÿ‘€`
   --> $DIR/emoji-identifiers.rs:2:8
@@ -53,17 +41,29 @@ LL | fn i_like_to_๐Ÿ˜…_a_lot() -> ๐Ÿ‘€ {
 LL |     ๐Ÿ‘€::full_ofโœจ()
    |     ^^
 
+error: identifiers cannot contain emoji: `full_of_โœจ`
+  --> $DIR/emoji-identifiers.rs:4:8
+   |
+LL |     fn full_of_โœจ() -> ๐Ÿ‘€ {
+   |        ^^^^^^^^^^
+
 error: identifiers cannot contain emoji: `i_like_to_๐Ÿ˜…_a_lot`
   --> $DIR/emoji-identifiers.rs:8:4
    |
 LL | fn i_like_to_๐Ÿ˜…_a_lot() -> ๐Ÿ‘€ {
    |    ^^^^^^^^^^^^^^^^^^
 
-error: identifiers cannot contain emoji: `ABig๐Ÿ‘ฉ๐Ÿ‘ฉ๐Ÿ‘ง๐Ÿ‘งFamily`
-  --> $DIR/emoji-identifiers.rs:1:8
+error: identifiers cannot contain emoji: `full_ofโœจ`
+  --> $DIR/emoji-identifiers.rs:9:8
    |
-LL | struct ABig๐Ÿ‘ฉ๐Ÿ‘ฉ๐Ÿ‘ง๐Ÿ‘งFamily;
-   |        ^^^^^^^^^^^^^^^^^^
+LL |     ๐Ÿ‘€::full_ofโœจ()
+   |         ^^^^^^^^^
+
+error: identifiers cannot contain emoji: `i_like_to_๐Ÿ˜„_a_lot`
+  --> $DIR/emoji-identifiers.rs:13:13
+   |
+LL |     let _ = i_like_to_๐Ÿ˜„_a_lot() โž– 4;
+   |             ^^^^^^^^^^^^^^^^^^
 
 error[E0599]: no function or associated item named `full_ofโœจ` found for struct `๐Ÿ‘€` in the current scope
   --> $DIR/emoji-identifiers.rs:9:8