| ... | @@ -8423,6 +8423,8 @@ static TypeTableEntry *ir_analyze_container_field_ptr(IrAnalyze *ira, Buf *field | ... | @@ -8423,6 +8423,8 @@ static TypeTableEntry *ir_analyze_container_field_ptr(IrAnalyze *ira, Buf *field |
| 8423 | TypeTableEntry *bare_type = container_ref_type(container_type); | 8423 | TypeTableEntry *bare_type = container_ref_type(container_type); |
| 8424 | ensure_complete_type(ira->codegen, bare_type); | 8424 | ensure_complete_type(ira->codegen, bare_type); |
| 8425 | | 8425 | |
| | 8426 | assert(container_ptr->value.type->id == TypeTableEntryIdPointer); |
| | 8427 | bool is_const = container_ptr->value.type->data.pointer.is_const; |
| 8426 | if (bare_type->id == TypeTableEntryIdStruct) { | 8428 | if (bare_type->id == TypeTableEntryIdStruct) { |
| 8427 | if (bare_type->data.structure.is_invalid) | 8429 | if (bare_type->data.structure.is_invalid) |
| 8428 | return ira->codegen->builtin_types.entry_invalid; | 8430 | return ira->codegen->builtin_types.entry_invalid; |
| ... | @@ -8430,7 +8432,7 @@ static TypeTableEntry *ir_analyze_container_field_ptr(IrAnalyze *ira, Buf *field | ... | @@ -8430,7 +8432,7 @@ static TypeTableEntry *ir_analyze_container_field_ptr(IrAnalyze *ira, Buf *field |
| 8430 | TypeStructField *field = find_struct_type_field(bare_type, field_name); | 8432 | TypeStructField *field = find_struct_type_field(bare_type, field_name); |
| 8431 | if (field) { | 8433 | if (field) { |
| 8432 | ir_build_struct_field_ptr_from(&ira->new_irb, &field_ptr_instruction->base, container_ptr, field); | 8434 | ir_build_struct_field_ptr_from(&ira->new_irb, &field_ptr_instruction->base, container_ptr, field); |
| 8433 | return get_pointer_to_type(ira->codegen, field->type_entry, false); | 8435 | return get_pointer_to_type(ira->codegen, field->type_entry, is_const); |
| 8434 | } else { | 8436 | } else { |
| 8435 | return ir_analyze_container_member_access_inner(ira, bare_type, field_name, | 8437 | return ir_analyze_container_member_access_inner(ira, bare_type, field_name, |
| 8436 | field_ptr_instruction, container_ptr, container_type); | 8438 | field_ptr_instruction, container_ptr, container_type); |
| ... | @@ -8442,7 +8444,7 @@ static TypeTableEntry *ir_analyze_container_field_ptr(IrAnalyze *ira, Buf *field | ... | @@ -8442,7 +8444,7 @@ static TypeTableEntry *ir_analyze_container_field_ptr(IrAnalyze *ira, Buf *field |
| 8442 | TypeEnumField *field = find_enum_type_field(bare_type, field_name); | 8444 | TypeEnumField *field = find_enum_type_field(bare_type, field_name); |
| 8443 | if (field) { | 8445 | if (field) { |
| 8444 | ir_build_enum_field_ptr_from(&ira->new_irb, &field_ptr_instruction->base, container_ptr, field); | 8446 | ir_build_enum_field_ptr_from(&ira->new_irb, &field_ptr_instruction->base, container_ptr, field); |
| 8445 | return get_pointer_to_type(ira->codegen, field->type_entry, false); | 8447 | return get_pointer_to_type(ira->codegen, field->type_entry, is_const); |
| 8446 | } else { | 8448 | } else { |
| 8447 | return ir_analyze_container_member_access_inner(ira, bare_type, field_name, | 8449 | return ir_analyze_container_member_access_inner(ira, bare_type, field_name, |
| 8448 | field_ptr_instruction, container_ptr, container_type); | 8450 | field_ptr_instruction, container_ptr, container_type); |