diff options
| author | Andrew Kelley <superjoe30@gmail.com> | 2017-06-17 10:28:42 -0400 |
|---|---|---|
| committer | Andrew Kelley <superjoe30@gmail.com> | 2017-06-17 10:29:04 -0400 |
| commit | 1566ca21c4bbe7f5aa5f385c7ebc22c780e54c8f (patch) | |
| tree | 49ceed12fda4c4c126458500da947a62fde93615 /src/ir.cpp | |
| parent | 91afdc58d2380556ecacf8bddb949dd905e67c86 (diff) | |
| download | zig-1566ca21c4bbe7f5aa5f385c7ebc22c780e54c8f.tar.gz zig-1566ca21c4bbe7f5aa5f385c7ebc22c780e54c8f.zip | |
fix peer type resolution for array and error
closes #388
Diffstat (limited to 'src/ir.cpp')
| -rw-r--r-- | src/ir.cpp | 10 |
1 files changed, 9 insertions, 1 deletions
diff --git a/src/ir.cpp b/src/ir.cpp index c327722612..d1f14baf8e 100644 --- a/src/ir.cpp +++ b/src/ir.cpp @@ -6460,6 +6460,9 @@ static TypeTableEntry *ir_resolve_peer_types(IrAnalyze *ira, AstNode *source_nod prev_inst = cur_inst; continue; } else if (cur_type->id == TypeTableEntryIdPureError) { + if (prev_type->id == TypeTableEntryIdArray) { + convert_to_const_slice = true; + } any_are_pure_error = true; continue; } else if (cur_type->id == TypeTableEntryIdNullLit) { @@ -6568,7 +6571,12 @@ static TypeTableEntry *ir_resolve_peer_types(IrAnalyze *ira, AstNode *source_nod } if (convert_to_const_slice) { assert(prev_inst->value.type->id == TypeTableEntryIdArray); - return get_slice_type(ira->codegen, prev_inst->value.type->data.array.child_type, true); + TypeTableEntry *slice_type = get_slice_type(ira->codegen, prev_inst->value.type->data.array.child_type, true); + if (any_are_pure_error) { + return get_error_type(ira->codegen, slice_type); + } else { + return slice_type; + } } else if (any_are_pure_error && prev_inst->value.type->id != TypeTableEntryIdPureError) { if (prev_inst->value.type->id == TypeTableEntryIdNumLitInt || prev_inst->value.type->id == TypeTableEntryIdNumLitFloat) |
