Check for zero-length slices in slice.equal

This commit is contained in:
Feoramund
2024-09-03 02:48:26 -04:00
parent 71b2527df0
commit 806c87d71d
2 changed files with 42 additions and 1 deletions
+11
View File
@@ -200,6 +200,17 @@ equal :: proc(a, b: $T/[]$E) -> bool where intrinsics.type_is_comparable(E) #no_
return false
}
when intrinsics.type_is_simple_compare(E) {
if len(a) == 0 {
// Empty slices are always equivalent to each other.
//
// This check is here in the event that a slice with a `data` of
// nil is compared against a slice with a non-nil `data` but a
// length of zero.
//
// In that case, `memory_compare` would return -1 or +1 because one
// of the pointers is nil.
return true
}
return runtime.memory_compare(raw_data(a), raw_data(b), len(a)*size_of(E)) == 0
} else {
for i in 0..<len(a) {