| ... | ... | @@ -7994,6 +7994,7 @@ static ImplicitCastMatchResult ir_types_match_with_implicit_cast(IrAnalyze *ira, |
| 7994 | 7994 | // implicit &const [N]T to []const T |
| 7995 | 7995 | if (is_slice(expected_type) && |
| 7996 | 7996 | actual_type->id == TypeTableEntryIdPointer && |
| 7997 | actual_type->data.pointer.ptr_len == PtrLenSingle && |
| 7997 | 7998 | actual_type->data.pointer.is_const && |
| 7998 | 7999 | actual_type->data.pointer.child_type->id == TypeTableEntryIdArray) |
| 7999 | 8000 | { |
| ... | ... | @@ -8012,6 +8013,7 @@ static ImplicitCastMatchResult ir_types_match_with_implicit_cast(IrAnalyze *ira, |
| 8012 | 8013 | // implicit [N]T to &const []const T |
| 8013 | 8014 | if (expected_type->id == TypeTableEntryIdPointer && |
| 8014 | 8015 | expected_type->data.pointer.is_const && |
| 8016 | expected_type->data.pointer.ptr_len == PtrLenSingle && |
| 8015 | 8017 | is_slice(expected_type->data.pointer.child_type) && |
| 8016 | 8018 | actual_type->id == TypeTableEntryIdArray) |
| 8017 | 8019 | { |
| ... | ... | @@ -8074,6 +8076,7 @@ static ImplicitCastMatchResult ir_types_match_with_implicit_cast(IrAnalyze *ira, |
| 8074 | 8076 | actual_type->id == TypeTableEntryIdComptimeInt) |
| 8075 | 8077 | { |
| 8076 | 8078 | if (expected_type->id == TypeTableEntryIdPointer && |
| 8079 | expected_type->data.pointer.ptr_len == PtrLenSingle && |
| 8077 | 8080 | expected_type->data.pointer.is_const) |
| 8078 | 8081 | { |
| 8079 | 8082 | if (ir_num_lit_fits_in_other_type(ira, value, expected_type->data.pointer.child_type, false)) { |
| ... | ... | @@ -8121,7 +8124,10 @@ static ImplicitCastMatchResult ir_types_match_with_implicit_cast(IrAnalyze *ira, |
| 8121 | 8124 | } |
| 8122 | 8125 | |
| 8123 | 8126 | // implicit enum to &const union which has the enum as the tag type |
| 8124 | | if (actual_type->id == TypeTableEntryIdEnum && expected_type->id == TypeTableEntryIdPointer) { |
| 8127 | if (actual_type->id == TypeTableEntryIdEnum && |
| 8128 | expected_type->id == TypeTableEntryIdPointer && |
| 8129 | expected_type->data.pointer.ptr_len == PtrLenSingle) |
| 8130 | { |
| 8125 | 8131 | TypeTableEntry *union_type = expected_type->data.pointer.child_type; |
| 8126 | 8132 | if (union_type->data.unionation.decl_node->data.container_decl.auto_enum || |
| 8127 | 8133 | union_type->data.unionation.decl_node->data.container_decl.init_arg_expr != nullptr) |
| ... | ... | @@ -8141,7 +8147,11 @@ static ImplicitCastMatchResult ir_types_match_with_implicit_cast(IrAnalyze *ira, |
| 8141 | 8147 | // implicitly take a const pointer to something |
| 8142 | 8148 | if (!type_requires_comptime(actual_type)) { |
| 8143 | 8149 | TypeTableEntry *const_ptr_actual = get_pointer_to_type(ira->codegen, actual_type, true); |
| 8144 | | if (types_match_const_cast_only(ira, expected_type, const_ptr_actual, source_node).id == ConstCastResultIdOk) { |
| 8150 | if (expected_type->id == TypeTableEntryIdPointer && |
| 8151 | expected_type->data.pointer.ptr_len == PtrLenSingle && |
| 8152 | types_match_const_cast_only(ira, expected_type, const_ptr_actual, |
| 8153 | source_node).id == ConstCastResultIdOk) |
| 8154 | { |
| 8145 | 8155 | return ImplicitCastMatchResultYes; |
| 8146 | 8156 | } |
| 8147 | 8157 | } |