From 3631fab2aded9ffd1af2809631fb264647ee52d2 Mon Sep 17 00:00:00 2001 From: lapotolo Date: Mon, 2 Mar 2020 00:17:09 +0100 Subject: [PATCH] fixed bug in shortcircuited AND and OR --- src/ast.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/ast.c b/src/ast.c index 2cfbe43..cf0ebb3 100644 --- a/src/ast.c +++ b/src/ast.c @@ -476,7 +476,7 @@ LLVMValueRef codegen_expr( // in the case left is true we need to evaluate the right hand side LLVMPositionBuilderAtEnd(builder, left_true_bb); - LLVMValueRef right_val = codegen_expr(e->binop.rhs, env, module, builder); + LLVMValueRef right_val = LLVMBuildAnd(builder, left_val, codegen_expr(e->binop.rhs, env, module, builder), ""); LLVMBuildBr(builder, cont_bb); left_true_bb = LLVMGetInsertBlock(builder); @@ -509,7 +509,7 @@ LLVMValueRef codegen_expr( LLVMBuildCondBr(builder, left_val, left_true_bb, left_false_bb); LLVMPositionBuilderAtEnd(builder, left_false_bb); - LLVMValueRef right_val = codegen_expr(e->binop.rhs, env, module, builder); + LLVMValueRef right_val = LLVMBuildOr(builder, left_val, codegen_expr(e->binop.rhs, env, module, builder), ""); LLVMBuildBr(builder, cont_bb); left_false_bb = LLVMGetInsertBlock(builder);