authorgravatar for andrew@ziglang.orgAndrew Kelley <andrew@ziglang.org> 2016-12-10 18:43:28-05:00
committergravatar for andrew@ziglang.orgAndrew Kelley <andrew@ziglang.org> 2016-12-10 18:43:28-05:00
log3cfbec3eef3e5949a457120287298233978cb236
tree4f69c7779d083888a98a6e92733e93cfbe0b2579
parent6feae8a4e90118df26738316ab1fb49882ba6431

IR: don't crash if number literal used with pure error


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

src/ir.cpp+9-1
...@@ -3206,7 +3206,15 @@ static TypeTableEntry *ir_determine_peer_types(IrAnalyze *ira, AstNode *source_n...@@ -3206,7 +3206,15 @@ static TypeTableEntry *ir_determine_peer_types(IrAnalyze *ira, AstNode *source_n
3206 }3206 }
3207 }3207 }
3208 if (any_are_pure_error && prev_inst->type_entry->id != TypeTableEntryIdPureError) {3208 if (any_are_pure_error && prev_inst->type_entry->id != TypeTableEntryIdPureError) {
3209 return get_error_type(ira->codegen, prev_inst->type_entry);3209 if (prev_inst->type_entry->id == TypeTableEntryIdNumLitInt ||
3210 prev_inst->type_entry->id == TypeTableEntryIdNumLitFloat)
3211 {
3212 add_node_error(ira->codegen, source_node,
3213 buf_sprintf("unable to make error union out of number literal"));
3214 return ira->codegen->builtin_types.entry_invalid;
3215 } else {
3216 return get_error_type(ira->codegen, prev_inst->type_entry);
3217 }
3210 } else {3218 } else {
3211 return prev_inst->type_entry;3219 return prev_inst->type_entry;
3212 }3220 }