| ... | @@ -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 | { |