From e50ef33c2a194ff1bd5ff0f485f2e6664d6519b0 Mon Sep 17 00:00:00 2001 From: gingerBill Date: Wed, 28 Apr 2021 12:34:16 +0100 Subject: Fix #921 --- src/llvm_backend.cpp | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) (limited to 'src/llvm_backend.cpp') diff --git a/src/llvm_backend.cpp b/src/llvm_backend.cpp index f81077b47..f215f12a4 100644 --- a/src/llvm_backend.cpp +++ b/src/llvm_backend.cpp @@ -14363,13 +14363,15 @@ void lb_generate_code(lbGenerator *gen) { Type *params = alloc_type_tuple(); Type *results = alloc_type_tuple(); + Type *t_ptr_cstring = alloc_type_pointer(t_cstring); + String name = str_lit("main"); if (build_context.metrics.os == TargetOs_windows && build_context.metrics.arch == TargetArch_386) { name = str_lit("mainCRTStartup"); } else { array_init(¶ms->Tuple.variables, permanent_allocator(), 2); params->Tuple.variables[0] = alloc_entity_param(nullptr, make_token_ident("argc"), t_i32, false, true); - params->Tuple.variables[1] = alloc_entity_param(nullptr, make_token_ident("argv"), alloc_type_pointer(t_cstring), false, true); + params->Tuple.variables[1] = alloc_entity_param(nullptr, make_token_ident("argv"), t_ptr_cstring, false, true); } array_init(&results->Tuple.variables, permanent_allocator(), 1); @@ -14385,6 +14387,14 @@ void lb_generate_code(lbGenerator *gen) { lb_begin_procedure_body(p); + { // initialize `runtime.args__` + lbValue argc = {LLVMGetParam(p->value, 0), t_i32}; + argc = lb_emit_conv(p, argc, t_int); + lbValue argv = {LLVMGetParam(p->value, 1), t_ptr_cstring}; + lbAddr args = lb_addr(lb_find_runtime_value(p->module, str_lit("args__"))); + lb_fill_slice(p, args, argv, argc); + } + LLVMBuildCall2(p->builder, LLVMGetElementType(lb_type(m, startup_runtime->type)), startup_runtime->value, nullptr, 0, ""); if (build_context.command_kind == Command_test) { -- cgit v1.2.3