summaryrefslogtreecommitdiff
path: root/src/trans/codegen_c.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/trans/codegen_c.cpp')
-rw-r--r--src/trans/codegen_c.cpp19
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();