[gcc r16-5347] gccrs: fix segfault with empty cfg attribute

Arthur Cohen cohenarthur@gcc.gnu.org
Mon Nov 17 14:58:52 GMT 2025


https://gcc.gnu.org/g:87b9661250fcf029fa5eb1c9173c56bfea5246da

commit r16-5347-g87b9661250fcf029fa5eb1c9173c56bfea5246da
Author: Lucas Ly Ba <lucas.ly-ba@outlook.com>
Date:   Thu Nov 6 14:57:45 2025 +0000

    gccrs: fix segfault with empty cfg attribute
    
    gcc/rust/ChangeLog:
    
            * ast/rust-ast.cc (Attribute::check_cfg_predicate): add cfg path in condition
    
    gcc/testsuite/ChangeLog:
    
            * rust/compile/issue-4261.rs: New test.
    
    Signed-off-by: Lucas Ly Ba <lucas.ly-ba@outlook.com>

Diff:
---
 gcc/rust/ast/rust-ast.cc                 | 7 ++++---
 gcc/testsuite/rust/compile/issue-4261.rs | 3 +++
 2 files changed, 7 insertions(+), 3 deletions(-)

diff --git a/gcc/rust/ast/rust-ast.cc b/gcc/rust/ast/rust-ast.cc
index 5bced483adb4..7c6a1d215af8 100644
--- a/gcc/rust/ast/rust-ast.cc
+++ b/gcc/rust/ast/rust-ast.cc
@@ -4179,10 +4179,11 @@ Attribute::check_cfg_predicate (const Session &session) const
 
   auto &meta_item = static_cast<AttrInputMetaItemContainer &> (*attr_input);
   if (meta_item.get_items ().empty ()
-      && string_path == Values::Attributes::CFG_ATTR)
+      && (string_path == Values::Attributes::CFG
+	  || string_path == Values::Attributes::CFG_ATTR))
     {
-      rust_error_at (path.get_locus (),
-		     "malformed %<cfg_attr%> attribute input");
+      rust_error_at (path.get_locus (), "malformed %<%s%> attribute input",
+		     string_path.c_str ());
       return false;
     }
 
diff --git a/gcc/testsuite/rust/compile/issue-4261.rs b/gcc/testsuite/rust/compile/issue-4261.rs
new file mode 100644
index 000000000000..32beafade547
--- /dev/null
+++ b/gcc/testsuite/rust/compile/issue-4261.rs
@@ -0,0 +1,3 @@
+#[cfg()]
+// { dg-error "malformed .cfg. attribute input" "" { target *-*-* } .-1 }
+fn a() {}


More information about the Gcc-cvs mailing list