authorgravatar for kubkon@jakubkonka.comJakub Konka <kubkon@jakubkonka.com> 2020-06-15 17:04:32+02:00
committergravatar for andrew@ziglang.orgAndrew Kelley <andrew@ziglang.org> 2020-06-16 18:24:45-04:00
log04c3fae720b57e72dedbaf28982e7e9bfed47db6
tree9c45fc0de517c0f5952435390595ab8cc13ed983
parentf595545c10a35b85879edfa3c002ce308ffeb6c2

Remove obsolete branch in ir_analyze_cast

Branch handling `*[N]T` to `E![]T` is already handled in a more complete branch handling `*[N]T` to `[]T` *and* `*[N]T` to `E![]T` so it seems safe to remove this one.

1 files changed, 0 insertions(+), 40 deletions(-)

src/ir.cpp-40
......@@ -15257,46 +15257,6 @@ static IrInstGen *ir_analyze_cast(IrAnalyze *ira, IrInst *source_instr,
1525715257 }
1525815258 }
1525915259
15260 // *[N]T to E![]T
15261 if (wanted_type->id == ZigTypeIdErrorUnion &&
15262 is_slice(wanted_type->data.error_union.payload_type) &&
15263 actual_type->id == ZigTypeIdPointer &&
15264 actual_type->data.pointer.ptr_len == PtrLenSingle &&
15265 actual_type->data.pointer.child_type->id == ZigTypeIdArray)
15266 {
15267 ZigType *slice_type = wanted_type->data.error_union.payload_type;
15268 ZigType *slice_ptr_type = slice_type->data.structure.fields[slice_ptr_index]->type_entry;
15269 assert(slice_ptr_type->id == ZigTypeIdPointer);
15270 ZigType *array_type = actual_type->data.pointer.child_type;
15271 bool const_ok = (slice_ptr_type->data.pointer.is_const || array_type->data.array.len == 0
15272 || !actual_type->data.pointer.is_const);
15273 if (const_ok && types_match_const_cast_only(ira, slice_ptr_type->data.pointer.child_type,
15274 array_type->data.array.child_type, source_node,
15275 !slice_ptr_type->data.pointer.is_const).id == ConstCastResultIdOk)
15276 {
15277 // If the pointers both have ABI align, it works.
15278 bool ok_align = slice_ptr_type->data.pointer.explicit_alignment == 0 &&
15279 actual_type->data.pointer.explicit_alignment == 0;
15280 if (!ok_align) {
15281 // If either one has non ABI align, we have to resolve them both
15282 if ((err = type_resolve(ira->codegen, actual_type->data.pointer.child_type,
15283 ResolveStatusAlignmentKnown)))
15284 {
15285 return ira->codegen->invalid_inst_gen;
15286 }
15287 if ((err = type_resolve(ira->codegen, slice_ptr_type->data.pointer.child_type,
15288 ResolveStatusAlignmentKnown)))
15289 {
15290 return ira->codegen->invalid_inst_gen;
15291 }
15292 ok_align = get_ptr_align(ira->codegen, actual_type) >= get_ptr_align(ira->codegen, slice_ptr_type);
15293 }
15294 if (ok_align) {
15295 return ir_resolve_ptr_of_array_to_slice(ira, source_instr, value, slice_type, nullptr);
15296 }
15297 }
15298 }
15299
1530015260 // @Vector(N,T1) to @Vector(N,T2)
1530115261 if (actual_type->id == ZigTypeIdVector && wanted_type->id == ZigTypeIdVector) {
1530215262 if (actual_type->data.vector.len == wanted_type->data.vector.len &&