aboutsummaryrefslogtreecommitdiff
path: root/src/analyze.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/analyze.cpp')
-rw-r--r--src/analyze.cpp13
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