diff options
Diffstat (limited to 'src/trans/codegen_c.cpp')
-rw-r--r-- | src/trans/codegen_c.cpp | 19 |
1 files changed, 13 insertions, 6 deletions
diff --git a/src/trans/codegen_c.cpp b/src/trans/codegen_c.cpp index 7308a9f3..28dffa8f 100644 --- a/src/trans/codegen_c.cpp +++ b/src/trans/codegen_c.cpp @@ -101,12 +101,19 @@ namespace { if( is_executable ) { - m_of - << "int main(int argc, const char* argv[]) {\n" - << "\t" << Trans_Mangle( ::HIR::GenericPath(m_resolve.m_crate.get_lang_item_path(Span(), "start")) ) << "(" - << "(uint8_t*)" << Trans_Mangle( ::HIR::GenericPath(m_resolve.m_crate.get_lang_item_path(Span(), "mrustc-main")) ) << ", argc, (uint8_t**)argv" - << ");\n" - << "}\n"; + m_of << "int main(int argc, const char* argv[]) {\n"; + auto c_start_path = m_resolve.m_crate.get_lang_item_path_opt("mrustc-start"); + if( c_start_path == ::HIR::SimplePath() ) + { + m_of << "\t" << Trans_Mangle( ::HIR::GenericPath(m_resolve.m_crate.get_lang_item_path(Span(), "start")) ) << "(" + << "(uint8_t*)" << Trans_Mangle( ::HIR::GenericPath(m_resolve.m_crate.get_lang_item_path(Span(), "mrustc-main")) ) << ", argc, (uint8_t**)argv" + << ");\n"; + } + else + { + m_of << "\t" << Trans_Mangle(::HIR::GenericPath(c_start_path)) << "(argc, argv);\n"; + } + m_of << "}\n"; } m_of.flush(); |