[gcc r16-6842] gccrs: util/attributes: error on malformed #[no_mangle] input
Arthur Cohen
cohenarthur@gcc.gnu.org
Fri Jan 16 16:30:34 GMT 2026
https://gcc.gnu.org/g:bf834bda455959a36323f98edefc59bfdfe1499e
commit r16-6842-gbf834bda455959a36323f98edefc59bfdfe1499e
Author: Jayant Chauhan <0001jayant@gmail.com>
Date: Tue Jan 6 23:42:58 2026 +0530
gccrs: util/attributes: error on malformed #[no_mangle] input
Emit a diagnostic when #[no_mangle] is used with arguments,
matching rustc behavior. The no_mangle attribute is a word
attribute and should not accept any input values.
Fixes Rust-GCC#4230
gcc/rust/ChangeLog:
* util/rust-attributes.cc (AttributeChecker::visit): Emit diagnostic.
gcc/testsuite/ChangeLog:
* rust/compile/no_mangle-malformed.rs: New test.
Signed-off-by: Jayant Chauhan <0001jayant@gmail.com>
Diff:
---
gcc/rust/util/rust-attributes.cc | 14 +++++++++++---
gcc/testsuite/rust/compile/no_mangle-malformed.rs | 4 ++++
2 files changed, 15 insertions(+), 3 deletions(-)
diff --git a/gcc/rust/util/rust-attributes.cc b/gcc/rust/util/rust-attributes.cc
index ec14744fff49..57fad8c2a582 100644
--- a/gcc/rust/util/rust-attributes.cc
+++ b/gcc/rust/util/rust-attributes.cc
@@ -464,7 +464,6 @@ AttributeChecker::check_attribute (const AST::Attribute &attribute)
else if (result.name == Attrs::DEPRECATED)
check_deprecated_attribute (attribute);
}
-
void
AttributeChecker::check_attributes (const AST::AttrVec &attributes)
{
@@ -876,8 +875,17 @@ AttributeChecker::visit (AST::Function &fun)
}
}
else if (result.name == "no_mangle")
- check_no_mangle_function (attribute, fun);
-
+ {
+ if (attribute.has_attr_input ())
+ {
+ rust_error_at (attribute.get_locus (),
+ "malformed %<no_mangle%> attribute input");
+ rust_inform (attribute.get_locus (),
+ "must be of the form: %<#[no_mangle]%>");
+ }
+ else
+ check_no_mangle_function (attribute, fun);
+ }
else if (result.name == Attrs::LINK_NAME)
{
if (!attribute.has_attr_input ())
diff --git a/gcc/testsuite/rust/compile/no_mangle-malformed.rs b/gcc/testsuite/rust/compile/no_mangle-malformed.rs
new file mode 100644
index 000000000000..5e73d5778fe2
--- /dev/null
+++ b/gcc/testsuite/rust/compile/no_mangle-malformed.rs
@@ -0,0 +1,4 @@
+// { dg-options "-w" }
+#[no_mangle(foo)] // { dg-error "malformed .no_mangle. attribute input" }
+fn foo() {}
+// { dg-note "must be of the form" "" { target *-*-* } .-2 }
More information about the Gcc-cvs
mailing list