Fix memory size leaking behavior

This commit is contained in:
Rerumu 2022-06-16 01:47:22 -04:00
parent 5037ab1ff8
commit 9a2b52fde5
2 changed files with 4 additions and 13 deletions

View File

@ -213,8 +213,7 @@ impl StatList {
leak_with_predicate!(leak_local_write, is_local_read); leak_with_predicate!(leak_local_write, is_local_read);
leak_with_predicate!(leak_global_write, is_global_read); leak_with_predicate!(leak_global_write, is_global_read);
leak_with_predicate!(leak_memory_size, is_memory_size); leak_with_predicate!(leak_memory_write, is_memory_read);
leak_with_predicate!(leak_memory_write, is_memory_ref);
fn leak_all(&mut self) { fn leak_all(&mut self) {
self.leak_with(|_| true); self.leak_with(|_| true);
@ -740,7 +739,6 @@ impl<'a> Builder<'a> {
let memory = i.try_into().unwrap(); let memory = i.try_into().unwrap();
let data = Expression::MemorySize(MemorySize { memory }); let data = Expression::MemorySize(MemorySize { memory });
self.target.leak_memory_write(memory);
self.target.push_tracked(data); self.target.push_tracked(data);
} }
Inst::GrowMemory(i) => { Inst::GrowMemory(i) => {
@ -750,9 +748,8 @@ impl<'a> Builder<'a> {
value: self.target.pop_required().into(), value: self.target.pop_required().into(),
}); });
self.target.leak_memory_size(memory);
self.target.leak_memory_write(memory);
self.target.push_tracked(data); self.target.push_tracked(data);
self.target.leak_all();
} }
Inst::I32Const(v) => self.target.push_constant(v), Inst::I32Const(v) => self.target.push_constant(v),
Inst::I64Const(v) => self.target.push_constant(v), Inst::I64Const(v) => self.target.push_constant(v),

View File

@ -649,14 +649,8 @@ impl Expression {
} }
#[must_use] #[must_use]
pub fn is_memory_size(&self, id: usize) -> bool { pub fn is_memory_read(&self, id: usize) -> bool {
matches!(self, Expression::MemorySize(v) if v.memory == id) id == 0 && matches!(self, Expression::LoadAt(_))
}
#[must_use]
pub fn is_memory_ref(&self, id: usize) -> bool {
matches!(self, Expression::MemoryGrow(v) if v.memory == id)
|| (id == 0 && matches!(self, Expression::LoadAt(_)))
} }
} }