[gcc r16-8220] gccrs: Prevent error emission with multiple wildcards
Arthur Cohen
cohenarthur@gcc.gnu.org
Fri Mar 20 17:25:06 GMT 2026
https://gcc.gnu.org/g:8feaf869baa1797df946822a5f0d45ad98fd4549
commit r16-8220-g8feaf869baa1797df946822a5f0d45ad98fd4549
Author: Pierre-Emmanuel Patry <pierre-emmanuel.patry@embecosm.com>
Date: Wed Feb 25 18:19:23 2026 +0100
gccrs: Prevent error emission with multiple wildcards
Every wildcard should be considered different and no error should be
emitted when multiple wildcards are used within the same rib.
gcc/rust/ChangeLog:
* resolve/rust-toplevel-name-resolver-2.0.cc(TopLevel::visit): Insert
constant item only if now wildcard.
gcc/testsuite/ChangeLog:
* rust/compile/wildcard_items.rs: New test.
Signed-off-by: Pierre-Emmanuel Patry <pierre-emmanuel.patry@embecosm.com>
Diff:
---
gcc/rust/resolve/rust-toplevel-name-resolver-2.0.cc | 5 +++--
gcc/testsuite/rust/compile/wildcard_items.rs | 14 ++++++++++++++
2 files changed, 17 insertions(+), 2 deletions(-)
diff --git a/gcc/rust/resolve/rust-toplevel-name-resolver-2.0.cc b/gcc/rust/resolve/rust-toplevel-name-resolver-2.0.cc
index 98245846d43c..67a8c52d1dea 100644
--- a/gcc/rust/resolve/rust-toplevel-name-resolver-2.0.cc
+++ b/gcc/rust/resolve/rust-toplevel-name-resolver-2.0.cc
@@ -367,8 +367,9 @@ TopLevel::visit (AST::Union &union_item)
void
TopLevel::visit (AST::ConstantItem &const_item)
{
- insert_or_error_out (const_item.get_identifier (), const_item,
- Namespace::Values);
+ if (const_item.get_identifier ().as_string () != Values::Keywords::UNDERSCORE)
+ insert_or_error_out (const_item.get_identifier (), const_item,
+ Namespace::Values);
DefaultResolver::visit (const_item);
}
diff --git a/gcc/testsuite/rust/compile/wildcard_items.rs b/gcc/testsuite/rust/compile/wildcard_items.rs
new file mode 100644
index 000000000000..8ce4733c1343
--- /dev/null
+++ b/gcc/testsuite/rust/compile/wildcard_items.rs
@@ -0,0 +1,14 @@
+#![feature(lang_items)]
+#![feature(no_core)]
+#![no_core]
+
+macro_rules! assert {
+ ($cond:expr $(,)?) => {{ /* compiler built-in */ }};
+ ($cond:expr, $($arg:tt)+) => {{ /* compiler built-in */ }};
+}
+
+#[lang = "sized"]
+trait Sized {}
+
+const _: () = assert!(true);
+const _: () = assert!(true);
More information about the Gcc-cvs
mailing list