Fix br_if and then tee_local validation. (#76)

This commit is contained in:
Sergey Pepyakin 2018-03-20 13:09:51 +03:00 committed by GitHub
parent 6253dd6fdf
commit 522fa20983
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
1 changed files with 5 additions and 8 deletions

View File

@ -371,10 +371,7 @@ impl Validator {
fn validate_tee_local(context: &mut FunctionValidationContext, index: u32) -> Result<InstructionOutcome, Error> { fn validate_tee_local(context: &mut FunctionValidationContext, index: u32) -> Result<InstructionOutcome, Error> {
let local_type = context.require_local(index)?; let local_type = context.require_local(index)?;
let value_type = context.tee_value(StackValueType::Any)?; context.tee_value(local_type)?;
if local_type != value_type {
return Err(Error(format!("Trying to update local {} of type {:?} with value of type {:?}", index, local_type, value_type)));
}
Ok(InstructionOutcome::ValidateNextInstruction) Ok(InstructionOutcome::ValidateNextInstruction)
} }
@ -641,10 +638,10 @@ impl<'a> FunctionValidationContext<'a> {
} }
} }
fn tee_value(&mut self, value_type: StackValueType) -> Result<StackValueType, Error> { fn tee_value(&mut self, value_type: StackValueType) -> Result<(), Error> {
let value = self.pop_value(value_type)?; let _ = self.pop_value(value_type)?;
self.push_value(value)?; self.push_value(value_type)?;
Ok(value) Ok(())
} }
fn unreachable(&mut self) -> Result<(), Error> { fn unreachable(&mut self) -> Result<(), Error> {