diff options
| author | emekoi <emekankurumeh@outlook.com> | 2019-03-31 14:19:13 -0500 |
|---|---|---|
| committer | emekoi <emekankurumeh@outlook.com> | 2019-03-31 16:47:34 -0500 |
| commit | 4a64f266272c2bce832d971b8082455becf5e478 (patch) | |
| tree | f560e2233541719d71fe6e891786879c85750679 /src/ir.cpp | |
| parent | a4afacd1822cea75196b27a8a5fe30bd252eccae (diff) | |
| download | zig-4a64f266272c2bce832d971b8082455becf5e478.tar.gz zig-4a64f266272c2bce832d971b8082455becf5e478.zip | |
added error for implicit cast from *const T to *[1]T. credit: @kristate
Diffstat (limited to 'src/ir.cpp')
| -rw-r--r-- | src/ir.cpp | 7 |
1 files changed, 6 insertions, 1 deletions
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))) |
