about summary refs log tree commit diff
diff options
context:
space:
mode:
authorMatthias Krüger <476013+matthiaskrgr@users.noreply.github.com>2025-05-21 11:28:47 +0200
committerGitHub <noreply@github.com>2025-05-21 11:28:47 +0200
commit5b150e312202cdceb6e0f6cb7ef58b3ac9780aea (patch)
tree2b836335dfd46af2703cc0758f24c342ae22b1ad
parentaaa684fd1d8678132e0a409b674b5cc0d43b895f (diff)
parent1cc0e38fdc4d2ec8c9c130d7ffc9c30d100885a2 (diff)
downloadrust-5b150e312202cdceb6e0f6cb7ef58b3ac9780aea.tar.gz
rust-5b150e312202cdceb6e0f6cb7ef58b3ac9780aea.zip
Rollup merge of #141318 - nnethercote:fix-140884, r=compiler-errors
Avoid creating an empty identifer in `Symbol::to_ident_string`.

Because that causes an assertion failure in debug builds.

Fixes #140884.

r? `@oli-obk`
-rw-r--r--compiler/rustc_span/src/symbol.rs3
-rw-r--r--tests/crashes/140884.rs6
-rw-r--r--tests/ui/extern/extern-empty-string-issue-140884.rs3
-rw-r--r--tests/ui/extern/extern-empty-string-issue-140884.stderr15
4 files changed, 20 insertions, 7 deletions
diff --git a/compiler/rustc_span/src/symbol.rs b/compiler/rustc_span/src/symbol.rs
index efae6250b07..fbe3b4ca6f5 100644
--- a/compiler/rustc_span/src/symbol.rs
+++ b/compiler/rustc_span/src/symbol.rs
@@ -2592,7 +2592,8 @@ impl Symbol {
     /// (`token_to_string`, `Ident::to_string`), except that symbols don't keep the rawness flag
     /// or edition, so we have to guess the rawness using the global edition.
     pub fn to_ident_string(self) -> String {
-        Ident::with_dummy_span(self).to_string()
+        // Avoid creating an empty identifier, because that asserts in debug builds.
+        if self == kw::Empty { String::new() } else { Ident::with_dummy_span(self).to_string() }
     }
 }
 
diff --git a/tests/crashes/140884.rs b/tests/crashes/140884.rs
deleted file mode 100644
index 6840760933a..00000000000
--- a/tests/crashes/140884.rs
+++ /dev/null
@@ -1,6 +0,0 @@
-//@ known-bug: #140884
-//@ needs-rustc-debug-assertions
-
-fn a() {
-    extern "" {}
-}
diff --git a/tests/ui/extern/extern-empty-string-issue-140884.rs b/tests/ui/extern/extern-empty-string-issue-140884.rs
new file mode 100644
index 00000000000..10291513d34
--- /dev/null
+++ b/tests/ui/extern/extern-empty-string-issue-140884.rs
@@ -0,0 +1,3 @@
+extern "" {} //~ ERROR invalid ABI: found ``
+
+fn main() {}
diff --git a/tests/ui/extern/extern-empty-string-issue-140884.stderr b/tests/ui/extern/extern-empty-string-issue-140884.stderr
new file mode 100644
index 00000000000..accae0c0f7c
--- /dev/null
+++ b/tests/ui/extern/extern-empty-string-issue-140884.stderr
@@ -0,0 +1,15 @@
+error[E0703]: invalid ABI: found ``
+  --> $DIR/extern-empty-string-issue-140884.rs:1:8
+   |
+LL | extern "" {}
+   |        ^^ invalid ABI
+   |
+   = note: invoke `rustc --print=calling-conventions` for a full list of supported calling conventions
+help: there's a similarly named valid ABI `C`
+   |
+LL | extern "C" {}
+   |         +
+
+error: aborting due to 1 previous error
+
+For more information about this error, try `rustc --explain E0703`.