@@ -4602,6 +4602,30 @@ fn create_crate_constant(@crate_ctxt cx) {
4602
4602
llvm. LLVMSetInitializer ( cx. crate_ptr , crate_val) ;
4603
4603
}
4604
4604
4605
+ fn find_main_fn ( @crate_ctxt cx ) -> ValueRef {
4606
+ auto e = sep ( ) + "main" ;
4607
+ let ValueRef v = C_nil ( ) ;
4608
+ let uint n = 0 u;
4609
+ for each ( tup( str, ValueRef ) i in cx. item_names. items( ) ) {
4610
+ if ( _str. ends_with ( i. _0 , e) ) {
4611
+ n += 1 u;
4612
+ v = i. _1 ;
4613
+ }
4614
+ }
4615
+ alt ( n) {
4616
+ case ( 0 u) {
4617
+ cx. sess . err ( "main fn not found" ) ;
4618
+ }
4619
+ case ( 1 u) {
4620
+ ret v;
4621
+ }
4622
+ case ( _) {
4623
+ cx. sess . err ( "multiple main fns found" ) ;
4624
+ }
4625
+ }
4626
+ fail;
4627
+ }
4628
+
4605
4629
fn trans_main_fn ( @crate_ctxt cx , ValueRef llcrate) {
4606
4630
auto T_main_args = vec ( T_int ( ) , T_int ( ) ) ;
4607
4631
auto T_rust_start_args = vec ( T_int ( ) , T_int ( ) , T_int ( ) , T_int ( ) ) ;
@@ -4621,8 +4645,7 @@ fn trans_main_fn(@crate_ctxt cx, ValueRef llcrate) {
4621
4645
4622
4646
auto llargc = llvm. LLVMGetParam ( llmain, 0 u) ;
4623
4647
auto llargv = llvm. LLVMGetParam ( llmain, 1 u) ;
4624
- check ( cx. item_names . contains_key ( "_rust" + sep ( ) + "main" ) ) ;
4625
- auto llrust_main = cx. item_names . get ( "_rust" + sep ( ) + "main" ) ;
4648
+ auto llrust_main = find_main_fn ( cx) ;
4626
4649
4627
4650
//
4628
4651
// Emit the moral equivalent of:
0 commit comments