diff --git a/src/io/files.c b/src/io/files.c index 59f05f7..ce14821 100644 --- a/src/io/files.c +++ b/src/io/files.c @@ -76,6 +76,11 @@ void delete_files(ModuleFileStack *stack) { // behaves like fgets except that it has defined behavior when n == 1 static void custom_fgets(char *buffer, size_t n, FILE *stream) { + if (feof(stream)) { + buffer[0] = '\n'; + buffer[1] = 0; + return; + } if (n == 1) { buffer[0] = (char) fgetc(stream); buffer[1] = 0; diff --git a/src/llvm/llvm-ir/expr.c b/src/llvm/llvm-ir/expr.c index 5b2d0d3..9341b31 100644 --- a/src/llvm/llvm-ir/expr.c +++ b/src/llvm/llvm-ir/expr.c @@ -372,10 +372,13 @@ BackendError impl_variable_load(LLVMBackendCompileUnit *unit, LLVMLocalScope *sc } else { type = variable->impl.declaration.type; } - get_type_impl(unit, scope->func_scope->global_scope, type, &llvm_type); - *llvm_result = LLVMBuildLoad2(builder, llvm_type, llvm_variable, ""); + if (LLVMGetTypeKind(LLVMTypeOf(llvm_variable)) == LLVMPointerTypeKind) { + *llvm_result = LLVMBuildLoad2(builder, llvm_type, llvm_variable, ""); + } else { + *llvm_result = llvm_variable; + } } return SUCCESS;