diff options
| author | Andrew Kelley <andrew@ziglang.org> | 2019-06-12 15:02:46 -0400 |
|---|---|---|
| committer | Andrew Kelley <andrew@ziglang.org> | 2019-06-12 15:02:46 -0400 |
| commit | 1526d89711c90a4a98dfecb6d3c64f28c3ab7da6 (patch) | |
| tree | c7e2354a7ea33cc0d5a17cca810d8a8b21de28ef | |
| parent | 35352e0f489882b9d5919ffd569e7dcda990f39b (diff) | |
| download | zig-1526d89711c90a4a98dfecb6d3c64f28c3ab7da6.tar.gz zig-1526d89711c90a4a98dfecb6d3c64f28c3ab7da6.zip | |
fix `@bitCast` with runtime scalar and dest result loc var
| -rw-r--r-- | src/ir.cpp | 10 | ||||
| -rw-r--r-- | std/special/compiler_rt/comparetf2.zig | 15 |
2 files changed, 15 insertions, 10 deletions
diff --git a/src/ir.cpp b/src/ir.cpp index d0ad7f944c..0f62c198f6 100644 --- a/src/ir.cpp +++ b/src/ir.cpp @@ -24232,11 +24232,13 @@ static IrInstruction *ir_analyze_instruction_end_expr(IrAnalyze *ira, IrInstruct static IrInstruction *ir_analyze_instruction_bit_cast_src(IrAnalyze *ira, IrInstructionBitCastSrc *instruction) { IrInstruction *operand = instruction->operand->child; - if (type_is_invalid(operand->value.type) || - instruction->result_loc_bit_cast->parent->gen_instruction == nullptr) - { + if (type_is_invalid(operand->value.type)) return operand; - } + + IrInstruction *result_loc = ir_resolve_result(ira, &instruction->base, + &instruction->result_loc_bit_cast->base, operand->value.type, operand); + if (result_loc != nullptr && (type_is_invalid(result_loc->value.type) || instr_is_unreachable(result_loc))) + return result_loc; return instruction->result_loc_bit_cast->parent->gen_instruction; } diff --git a/std/special/compiler_rt/comparetf2.zig b/std/special/compiler_rt/comparetf2.zig index 0912b71bd5..aaaba954d6 100644 --- a/std/special/compiler_rt/comparetf2.zig +++ b/std/special/compiler_rt/comparetf2.zig @@ -73,12 +73,15 @@ pub extern fn __getf2(a: f128, b: f128) c_int { if (aAbs > infRep or bAbs > infRep) return GE_UNORDERED; if ((aAbs | bAbs) == 0) return GE_EQUAL; - return if ((aInt & bInt) >= 0) if (aInt < bInt) - GE_LESS - else if (aInt == bInt) - GE_EQUAL - else - GE_GREATER else if (aInt > bInt) + // zig fmt issue here, see https://github.com/ziglang/zig/issues/2661 + return if ((aInt & bInt) >= 0) + if (aInt < bInt) + GE_LESS + else if (aInt == bInt) + GE_EQUAL + else + GE_GREATER + else if (aInt > bInt) GE_LESS else if (aInt == bInt) GE_EQUAL |
