diff options
| author | Raul Leal <raulgrell@gmail.com> | 2018-08-22 18:12:08 +0100 |
|---|---|---|
| committer | Andrew Kelley <superjoe30@gmail.com> | 2018-08-22 13:12:08 -0400 |
| commit | 87b10400c2a2d39f33e361cf4d7fd8caee7e519b (patch) | |
| tree | 318c5b472ebab1a255be891714c89567b943cdc9 /src/ir.cpp | |
| parent | 3d780cf2ef8391b6b48124f599858ee99ddc4cdc (diff) | |
| download | zig-87b10400c2a2d39f33e361cf4d7fd8caee7e519b.tar.gz zig-87b10400c2a2d39f33e361cf4d7fd8caee7e519b.zip | |
allow implicit cast from *[N]T to ?[*]T (#1398)
* allow implicit cast from *[N]T to ?[*]T
Diffstat (limited to 'src/ir.cpp')
| -rw-r--r-- | src/ir.cpp | 13 |
1 files changed, 13 insertions, 0 deletions
diff --git a/src/ir.cpp b/src/ir.cpp index d9df5772db..8814daa15b 100644 --- a/src/ir.cpp +++ b/src/ir.cpp @@ -10697,6 +10697,19 @@ static IrInstruction *ir_analyze_cast(IrAnalyze *ira, IrInstruction *source_inst return ira->codegen->invalid_instruction; return cast2; + } else if ( + wanted_child_type->id == TypeTableEntryIdPointer && + wanted_child_type->data.pointer.ptr_len == PtrLenUnknown && + actual_type->id == TypeTableEntryIdPointer && + actual_type->data.pointer.ptr_len == PtrLenSingle && + actual_type->data.pointer.child_type->id == TypeTableEntryIdArray && + actual_type->data.pointer.alignment >= wanted_child_type->data.pointer.alignment && + types_match_const_cast_only(ira, wanted_child_type->data.pointer.child_type, + actual_type->data.pointer.child_type->data.array.child_type, source_node, + !wanted_child_type->data.pointer.is_const).id == ConstCastResultIdOk) + { + IrInstruction *cast1 = ir_resolve_ptr_of_array_to_slice(ira, source_instr, value, wanted_child_type); + return ir_analyze_maybe_wrap(ira, source_instr, cast1, wanted_type); } } |
