https://gcc.gnu.org/g:c3642a2cded7b6e8c92d065fff890653d02a15ad

commit r16-2942-gc3642a2cded7b6e8c92d065fff890653d02a15ad
Author: Philip Herron <herron.phi...@googlemail.com>
Date:   Fri Jul 18 16:22:44 2025 +0100

    gccrs: Fix ICE with duplicate root item main function
    
    Rust seems to allow duplicate HIR::Item 'main' functions but it needs
    to be a root item to be the true main entry point. This means we can
    use the canonical path to determine if this is a root one where
    its CrateName::main or CrateName::Module::main.
    
    Fixes Rust-GCC#3978
    
    gcc/rust/ChangeLog:
    
            * backend/rust-compile-base.cc: check the canonical path
    
    gcc/testsuite/ChangeLog:
    
            * rust/compile/issue-3978.rs: New test.
    
    Signed-off-by: Philip Herron <herron.phi...@googlemail.com>

Diff:
---
 gcc/rust/backend/rust-compile-base.cc    | 3 ++-
 gcc/testsuite/rust/compile/issue-3978.rs | 8 ++++++++
 2 files changed, 10 insertions(+), 1 deletion(-)

diff --git a/gcc/rust/backend/rust-compile-base.cc 
b/gcc/rust/backend/rust-compile-base.cc
index b2913ad3c381..8994520f16d5 100644
--- a/gcc/rust/backend/rust-compile-base.cc
+++ b/gcc/rust/backend/rust-compile-base.cc
@@ -697,7 +697,8 @@ HIRCompileBase::compile_function (
     = canonical_path.get () + fntype->subst_as_string ();
 
   // we don't mangle the main fn since we haven't implemented the main shim
-  bool is_main_fn = fn_name.compare ("main") == 0 && is_root_item;
+  bool is_main_fn = fn_name.compare ("main") == 0 && is_root_item
+                   && canonical_path.size () <= 2;
   if (is_main_fn)
     {
       rust_assert (!main_identifier_node);
diff --git a/gcc/testsuite/rust/compile/issue-3978.rs 
b/gcc/testsuite/rust/compile/issue-3978.rs
new file mode 100644
index 000000000000..4f17d3d4d04a
--- /dev/null
+++ b/gcc/testsuite/rust/compile/issue-3978.rs
@@ -0,0 +1,8 @@
+type Dimension = usize;
+
+pub fn main() {}
+
+mod m2 {
+    fn main() {}
+    // { dg-warning "function is never used" "" { target *-*-* } .-1 }
+}

Reply via email to