| ... | ... | @@ -2615,25 +2615,30 @@ bool types_match_const_cast_only(TypeTableEntry *expected_type, TypeTableEntry * |
| 2615 | 2615 | (!actual_type->data.pointer.is_const || expected_type->data.pointer.is_const) && |
| 2616 | 2616 | (!actual_type->data.pointer.is_volatile || expected_type->data.pointer.is_volatile) && |
| 2617 | 2617 | actual_type->data.pointer.bit_offset == expected_type->data.pointer.bit_offset && |
| 2618 | | actual_type->data.pointer.unaligned_bit_count == expected_type->data.pointer.unaligned_bit_count) |
| 2618 | actual_type->data.pointer.unaligned_bit_count == expected_type->data.pointer.unaligned_bit_count && |
| 2619 | actual_type->data.pointer.alignment >= expected_type->data.pointer.alignment) |
| 2619 | 2620 | { |
| 2620 | 2621 | return types_match_const_cast_only(expected_type->data.pointer.child_type, |
| 2621 | 2622 | actual_type->data.pointer.child_type); |
| 2622 | 2623 | } |
| 2623 | 2624 | |
| 2624 | | // unknown size array const |
| 2625 | // slice const |
| 2625 | 2626 | if (expected_type->id == TypeTableEntryIdStruct && |
| 2626 | 2627 | actual_type->id == TypeTableEntryIdStruct && |
| 2627 | 2628 | expected_type->data.structure.is_slice && |
| 2628 | | actual_type->data.structure.is_slice && |
| 2629 | | (!actual_type->data.structure.fields[slice_ptr_index].type_entry->data.pointer.is_const || |
| 2630 | | expected_type->data.structure.fields[slice_ptr_index].type_entry->data.pointer.is_const) && |
| 2631 | | (!actual_type->data.structure.fields[slice_ptr_index].type_entry->data.pointer.is_volatile || |
| 2632 | | expected_type->data.structure.fields[slice_ptr_index].type_entry->data.pointer.is_volatile)) |
| 2629 | actual_type->data.structure.is_slice) |
| 2633 | 2630 | { |
| 2634 | | return types_match_const_cast_only( |
| 2635 | | expected_type->data.structure.fields[slice_ptr_index].type_entry->data.pointer.child_type, |
| 2636 | | actual_type->data.structure.fields[slice_ptr_index].type_entry->data.pointer.child_type); |
| 2631 | TypeTableEntry *actual_ptr_type = actual_type->data.structure.fields[slice_ptr_index].type_entry; |
| 2632 | TypeTableEntry *expected_ptr_type = expected_type->data.structure.fields[slice_ptr_index].type_entry; |
| 2633 | if ((!actual_ptr_type->data.pointer.is_const || expected_ptr_type->data.pointer.is_const) && |
| 2634 | (!actual_ptr_type->data.pointer.is_volatile || expected_ptr_type->data.pointer.is_volatile) && |
| 2635 | actual_ptr_type->data.pointer.bit_offset == expected_ptr_type->data.pointer.bit_offset && |
| 2636 | actual_ptr_type->data.pointer.unaligned_bit_count == expected_ptr_type->data.pointer.unaligned_bit_count && |
| 2637 | actual_ptr_type->data.pointer.alignment >= expected_ptr_type->data.pointer.alignment) |
| 2638 | { |
| 2639 | return types_match_const_cast_only(expected_ptr_type->data.pointer.child_type, |
| 2640 | actual_ptr_type->data.pointer.child_type); |
| 2641 | } |
| 2637 | 2642 | } |
| 2638 | 2643 | |
| 2639 | 2644 | // maybe |