https://gcc.gnu.org/g:705de6d54ca95b8277a15fe9a2255af6168ae086

commit 705de6d54ca95b8277a15fe9a2255af6168ae086
Author: Thomas Schwinge <tho...@codesourcery.com>
Date:   Wed Apr 12 11:47:01 2023 +0200

    Rust: Make 'tree'-level 'MAIN_NAME_P' work
    
    'gcc/tree.h':
    
        #define main_identifier_node                
global_trees[TI_MAIN_IDENTIFIER]
        #define MAIN_NAME_P(NODE) \
          (IDENTIFIER_NODE_CHECK (NODE) == main_identifier_node)
    
    ..., which is not initialized by default, but has to be set up by every 
front
    end individually.  'MAIN_NAME_P' enables certain code optimizations, but is
    especially also relevant for back ends that emit additional program entry 
setup
    code for 'main'.
    
            gcc/rust/
            * backend/rust-compile-base.cc (HIRCompileBase::compile_function):
            For 'main', initialize 'main_identifier_node'.

Diff:
---
 gcc/rust/backend/rust-compile-base.cc | 6 ++++++
 1 file changed, 6 insertions(+)

diff --git a/gcc/rust/backend/rust-compile-base.cc 
b/gcc/rust/backend/rust-compile-base.cc
index 9650d1a47ee6..19bf24237724 100644
--- a/gcc/rust/backend/rust-compile-base.cc
+++ b/gcc/rust/backend/rust-compile-base.cc
@@ -523,6 +523,12 @@ HIRCompileBase::compile_function (
 
   // we don't mangle the main fn since we haven't implemented the main shim
   bool is_main_fn = fn_name.compare ("main") == 0;
+  if (is_main_fn)
+    {
+      rust_assert (!main_identifier_node);
+      /* So that 'MAIN_NAME_P' works.  */
+      main_identifier_node = get_identifier (ir_symbol_name.c_str ());
+    }
   std::string asm_name = fn_name;
 
   unsigned int flags = 0;

Reply via email to