mirror of
https://github.com/c3lang/c3c.git
synced 2026-02-27 12:01:16 +00:00
List.remove_at would incorrectly trigger ASAN.
This commit is contained in:
@@ -137,9 +137,10 @@ fn Type? List.pop_first(&self)
|
||||
*>
|
||||
fn void List.remove_at(&self, usz index)
|
||||
{
|
||||
self.set_size(self.size - 1);
|
||||
if (!self.size || index == self.size) return;
|
||||
self.entries[index .. self.size - 1] = self.entries[index + 1 .. self.size];
|
||||
usz new_size = self.size - 1;
|
||||
defer self.set_size(new_size);
|
||||
if (!new_size || index == new_size) return;
|
||||
self.entries[index .. new_size - 1] = self.entries[index + 1 .. new_size];
|
||||
}
|
||||
|
||||
fn void List.add_all(&self, List* other_list)
|
||||
|
||||
@@ -6,6 +6,8 @@
|
||||
- Support `alias foo = module std::io` module aliasing.
|
||||
|
||||
### Fixes
|
||||
- List.remove_at would incorrectly trigger ASAN.
|
||||
|
||||
### Stdlib changes
|
||||
|
||||
## 0.7.4 Change list
|
||||
|
||||
@@ -20,6 +20,22 @@ fn void overaligned_type()
|
||||
assert((usz)l.get_ref(2) - (usz)l.get_ref(1) == Overalign.sizeof);
|
||||
}
|
||||
|
||||
fn void remove_at()
|
||||
{
|
||||
IntList test;
|
||||
test.init(mem);
|
||||
defer test.free();
|
||||
test.add_array({ 1, 2, 3, 4 });
|
||||
test::eq(test.array_view(), (int[]){ 1, 2, 3, 4 });
|
||||
test.remove_at(0);
|
||||
test::eq(test.array_view(), (int[]){ 2, 3, 4 });
|
||||
test.remove_at(1);
|
||||
test::eq(test.array_view(), (int[]){ 2, 4 });
|
||||
test.remove_at(1);
|
||||
test::eq(test.array_view(), (int[]){ 2 });
|
||||
test.remove_at(0);
|
||||
test::eq(test.array_view(), (int[]){ });
|
||||
}
|
||||
|
||||
fn void delete_contains_index()
|
||||
{
|
||||
|
||||
Reference in New Issue
Block a user