diff --git a/src/codegen.cpp b/src/codegen.cpp index 8776f91..cc71be8 100644 --- a/src/codegen.cpp +++ b/src/codegen.cpp @@ -231,12 +231,17 @@ namespace AST { int counter = 0; for (auto& param : this->m_params) { - auto param_ty_ptr = param_ty_ptrs[counter]; + builder.builder->SetInsertPoint(BB); + auto arg_ptr = builder.builder->CreateAlloca(param_ty_ptrs[counter]->codegen(builder)); + auto param_ty_ptr = std::shared_ptr{ + new types::PointerType { param_ty_ptrs[counter]} + }; auto arg = function->getArg(counter++); + builder.builder->CreateStore(arg, arg_ptr); if (param.first) { arg->setName(*param.first); inner_scope.values[*param.first] = codegen::StackValue{ - arg, + arg_ptr, param_ty_ptr, }; } diff --git a/test.c b/test.c index cf3f89a..55eb5e0 100644 --- a/test.c +++ b/test.c @@ -6,10 +6,13 @@ int fibonacci(int n) { return fibonacci(n - 1) + fibonacci(n - 2); } +void modifyvalue(char* otus) { + (*otus) = 20; +} + int main() { printf("10th fibonacci number is %d!", fibonacci(10)); - char res = 0; - char* test = &res; - (*test) = 20; + char res = 10; + modifyvalue(&res); return res; } \ No newline at end of file