authorgravatar for andrew@ziglang.orgAndrew Kelley <andrew@ziglang.org> 2015-12-15 02:58:01-07:00
committergravatar for andrew@ziglang.orgAndrew Kelley <andrew@ziglang.org> 2015-12-15 02:58:01-07:00
logde7c5ea1026db1c32fac522c71e9d5c57de6ed14
treeab2f6b30f92f9ec30773b66fca369d8d41380627
parent1f48b626a1cef1168d23654f5a9f21ed2196738e

codegen: add support for shortening cast


1 files changed, 8 insertions(+), 2 deletions(-)

src/codegen.cpp+8-2
...@@ -292,10 +292,16 @@ static LLVMValueRef gen_cast_expr(CodeGen *g, AstNode *node) {...@@ -292,10 +292,16 @@ static LLVMValueRef gen_cast_expr(CodeGen *g, AstNode *node) {
292 if (actual_type->data.integral.is_signed && wanted_type->data.integral.is_signed) {292 if (actual_type->data.integral.is_signed && wanted_type->data.integral.is_signed) {
293 return LLVMBuildSExt(g->builder, expr_val, wanted_type->type_ref, "");293 return LLVMBuildSExt(g->builder, expr_val, wanted_type->type_ref, "");
294 } else {294 } else {
295 zig_panic("TODO gen_cast_expr sign mismatch");295 zig_panic("TODO gen_cast_expr widen unsigned");
296 }296 }
297 } else {297 } else {
298 zig_panic("TODO gen_cast_expr");298 assert(actual_type->size_in_bits > wanted_type->size_in_bits);
299
300 if (actual_type->data.integral.is_signed && wanted_type->data.integral.is_signed) {
301 return LLVMBuildTrunc(g->builder, expr_val, wanted_type->type_ref, "");
302 } else {
303 zig_panic("TODO gen_cast_expr shorten unsigned");
304 }
299 }305 }
300 case CastOpArrayToString:306 case CastOpArrayToString:
301 {307 {