memcpy and memset builtins support volatile pointers

See #238
This commit is contained in:
Andrew Kelley
2017-02-04 22:12:06 -05:00
parent 419e75eb23
commit b840184bb0
4 changed files with 34 additions and 13 deletions

View File

@@ -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