authorgravatar for andrew@ziglang.orgAndrew Kelley <andrew@ziglang.org> 2016-01-06 03:52:49-07:00
committergravatar for andrew@ziglang.orgAndrew Kelley <andrew@ziglang.org> 2016-01-06 03:52:49-07:00
log3fbde00eee1298feec4051f103c1014fe5819ede
tree10b9f6b026d6a9d4bea850646e4f74d3645b365d
parentf751a85d557d11dbbf09a03797a32bfd3edc8d6e

codegen: fix lshr/ashr not looking at int sign


1 files changed, 4 insertions(+), 1 deletions(-)

src/codegen.cpp+4-1
...@@ -542,8 +542,11 @@ static LLVMValueRef gen_arithmetic_bin_op(CodeGen *g, AstNode *source_node,...@@ -542,8 +542,11 @@ static LLVMValueRef gen_arithmetic_bin_op(CodeGen *g, AstNode *source_node,
542 return LLVMBuildShl(g->builder, val1, val2, "");542 return LLVMBuildShl(g->builder, val1, val2, "");
543 case BinOpTypeBitShiftRight:543 case BinOpTypeBitShiftRight:
544 case BinOpTypeAssignBitShiftRight:544 case BinOpTypeAssignBitShiftRight:
545 assert(op1_type->id == TypeTableEntryIdInt);
546 assert(op2_type->id == TypeTableEntryIdInt);
547
545 add_debug_source_node(g, source_node);548 add_debug_source_node(g, source_node);
546 if (op1_type->id == TypeTableEntryIdInt) {549 if (op1_type->data.integral.is_signed) {
547 return LLVMBuildAShr(g->builder, val1, val2, "");550 return LLVMBuildAShr(g->builder, val1, val2, "");
548 } else {551 } else {
549 return LLVMBuildLShr(g->builder, val1, val2, "");552 return LLVMBuildLShr(g->builder, val1, val2, "");