diff options
Diffstat (limited to 'src/analyze.cpp')
| -rw-r--r-- | src/analyze.cpp | 13 |
1 files changed, 8 insertions, 5 deletions
diff --git a/src/analyze.cpp b/src/analyze.cpp index 0cc8c4fe35..012eb6d7df 100644 --- a/src/analyze.cpp +++ b/src/analyze.cpp @@ -2036,7 +2036,8 @@ bool types_match_const_cast_only(TypeTableEntry *expected_type, TypeTableEntry * // pointer const if (expected_type->id == TypeTableEntryIdPointer && actual_type->id == TypeTableEntryIdPointer && - (!actual_type->data.pointer.is_const || expected_type->data.pointer.is_const)) + (!actual_type->data.pointer.is_const || expected_type->data.pointer.is_const) && + (!actual_type->data.pointer.is_volatile || expected_type->data.pointer.is_volatile)) { return types_match_const_cast_only(expected_type->data.pointer.child_type, actual_type->data.pointer.child_type); @@ -2047,12 +2048,14 @@ bool types_match_const_cast_only(TypeTableEntry *expected_type, TypeTableEntry * actual_type->id == TypeTableEntryIdStruct && expected_type->data.structure.is_slice && actual_type->data.structure.is_slice && - (!actual_type->data.structure.fields[0].type_entry->data.pointer.is_const || - expected_type->data.structure.fields[0].type_entry->data.pointer.is_const)) + (!actual_type->data.structure.fields[slice_ptr_index].type_entry->data.pointer.is_const || + expected_type->data.structure.fields[slice_ptr_index].type_entry->data.pointer.is_const) && + (!actual_type->data.structure.fields[slice_ptr_index].type_entry->data.pointer.is_volatile || + expected_type->data.structure.fields[slice_ptr_index].type_entry->data.pointer.is_volatile)) { return types_match_const_cast_only( - expected_type->data.structure.fields[0].type_entry->data.pointer.child_type, - actual_type->data.structure.fields[0].type_entry->data.pointer.child_type); + expected_type->data.structure.fields[slice_ptr_index].type_entry->data.pointer.child_type, + actual_type->data.structure.fields[slice_ptr_index].type_entry->data.pointer.child_type); } // maybe |
