From 4a64f266272c2bce832d971b8082455becf5e478 Mon Sep 17 00:00:00 2001 From: emekoi Date: Sun, 31 Mar 2019 14:19:13 -0500 Subject: added error for implicit cast from *const T to *[1]T. credit: @kristate --- src/ir.cpp | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) (limited to 'src/ir.cpp') diff --git a/src/ir.cpp b/src/ir.cpp index 52f8f2b935..f0387e6ab3 100644 --- a/src/ir.cpp +++ b/src/ir.cpp @@ -11090,6 +11090,7 @@ static IrInstruction *ir_analyze_ptr_to_array(IrAnalyze *ira, IrInstruction *sou Error err; if ((err = type_resolve(ira->codegen, target->value.type->data.pointer.child_type, ResolveStatusAlignmentKnown))) return ira->codegen->invalid_instruction; + assert((wanted_type->data.pointer.is_const && target->value.type->data.pointer.is_const) || !target->value.type->data.pointer.is_const); wanted_type = adjust_ptr_align(ira->codegen, wanted_type, get_ptr_align(ira->codegen, target->value.type)); ZigType *array_type = wanted_type->data.pointer.child_type; assert(array_type->id == ZigTypeIdArray); @@ -11651,7 +11652,11 @@ static IrInstruction *ir_analyze_cast(IrAnalyze *ira, IrInstruction *source_inst if (array_type->id == ZigTypeIdArray && array_type->data.array.len == 1 && types_match_const_cast_only(ira, array_type->data.array.child_type, actual_type->data.pointer.child_type, source_node, - !wanted_type->data.pointer.is_const).id == ConstCastResultIdOk) + !wanted_type->data.pointer.is_const).id == ConstCastResultIdOk && + // This should be the job of `types_match_const_cast_only` + // but `types_match_const_cast_only` only gets info for child_types + ((wanted_type->data.pointer.is_const && actual_type->data.pointer.is_const) || + !actual_type->data.pointer.is_const)) { if ((err = type_resolve(ira->codegen, wanted_type->data.pointer.child_type, ResolveStatusAlignmentKnown))) -- cgit v1.2.3