aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorThomas Schwinge <thomas@codesourcery.com>2023-04-12 11:47:01 +0200
committerArthur Cohen <arthur.cohen@embecosm.com>2024-08-01 12:47:18 +0200
commit5f9e88211c6ad939cfec017a66e663d686c9c3ab (patch)
treeac7279c93aab0ea3781cda106c669623d3a8fe42 /gcc
parented03af4ef3b9ad0bd3b7c5c678c02253e5cb9e0f (diff)
downloadgcc-5f9e88211c6ad939cfec017a66e663d686c9c3ab.zip
gcc-5f9e88211c6ad939cfec017a66e663d686c9c3ab.tar.gz
gcc-5f9e88211c6ad939cfec017a66e663d686c9c3ab.tar.bz2
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'.
Diffstat (limited to 'gcc')
-rw-r--r--gcc/rust/backend/rust-compile-base.cc6
1 files changed, 6 insertions, 0 deletions
diff --git a/gcc/rust/backend/rust-compile-base.cc b/gcc/rust/backend/rust-compile-base.cc
index 984492f..4d6f027 100644
--- a/gcc/rust/backend/rust-compile-base.cc
+++ b/gcc/rust/backend/rust-compile-base.cc
@@ -657,6 +657,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;