aboutsummaryrefslogtreecommitdiff
path: root/src/ir.cpp
diff options
context:
space:
mode:
authorAndrew Kelley <andrew@ziglang.org>2019-05-09 13:18:13 -0400
committerAndrew Kelley <andrew@ziglang.org>2019-05-09 13:18:13 -0400
commitc459edac18a53854dbfdebe50a370d169e715145 (patch)
tree75ec87c03ff82d59503657d9d291cb88b7638429 /src/ir.cpp
parent72899da44bb95ebd90f5fcc5b0d3212491f94e9a (diff)
downloadzig-c459edac18a53854dbfdebe50a370d169e715145.tar.gz
zig-c459edac18a53854dbfdebe50a370d169e715145.zip
compile error for attempt to cast enum literal to error
closes #2203
Diffstat (limited to 'src/ir.cpp')
-rw-r--r--src/ir.cpp10
1 files changed, 8 insertions, 2 deletions
diff --git a/src/ir.cpp b/src/ir.cpp
index 1cfdb4544d..9811225c3d 100644
--- a/src/ir.cpp
+++ b/src/ir.cpp
@@ -21213,11 +21213,17 @@ static IrInstruction *ir_analyze_instruction_check_switch_prongs(IrAnalyze *ira,
for (size_t range_i = 0; range_i < instruction->range_count; range_i += 1) {
IrInstructionCheckSwitchProngsRange *range = &instruction->ranges[range_i];
- IrInstruction *start_value = range->start->child;
+ IrInstruction *start_value_uncasted = range->start->child;
+ if (type_is_invalid(start_value_uncasted->value.type))
+ return ira->codegen->invalid_instruction;
+ IrInstruction *start_value = ir_implicit_cast(ira, start_value_uncasted, switch_type);
if (type_is_invalid(start_value->value.type))
return ira->codegen->invalid_instruction;
- IrInstruction *end_value = range->end->child;
+ IrInstruction *end_value_uncasted = range->end->child;
+ if (type_is_invalid(end_value_uncasted->value.type))
+ return ira->codegen->invalid_instruction;
+ IrInstruction *end_value = ir_implicit_cast(ira, end_value_uncasted, switch_type);
if (type_is_invalid(end_value->value.type))
return ira->codegen->invalid_instruction;