'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'.
// 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;