-
Notifications
You must be signed in to change notification settings - Fork 835
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
709: new feature flag: `deterministic` r=MarkMcCaskey a=YaronWittenstein The motivation for the PR is for introducing a new feature flag called `deterministic`. When `deterministic` will be enabled (turned-off by default) it'll guarantee deterministic execution of wasm programs across different hardware/circumstances. This is critical for Blockchain projects that require execution to be deterministic in order to reach a consensus of the state transition of each smart-contract transaction. 865: adding tests for `state_creator` of `import_object` r=MarkMcCaskey a=YaronWittenstein Part of the PR #807 changes was adding support for shared import objects between threads. https://github.com/wasmerio/wasmer/pull/807/files#diff-d20cb4c5a883566b85be4cc046f45aa9R49 I've added tests/examples on how to create an `import object` with a state_creator (function or closure) 1042: Make regression test work in release builds too. r=nlewycky a=nlewycky Fix this regression test to detect the bug it was looking for in release builds too. This bug triggered an assertion failure in debug, and by examining the pre-opt IR, we can check for the bug in release mode too. Co-authored-by: Yaron Wittenstein <[email protected]> Co-authored-by: Yaron Wittenstein <[email protected]> Co-authored-by: Mark McCaskey <[email protected]> Co-authored-by: Mark McCaskey <[email protected]> Co-authored-by: Nick Lewycky <[email protected]>
- Loading branch information
Showing
10 changed files
with
126 additions
and
20 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,40 +1,68 @@ | ||
use wasmer_llvm_backend::{InkwellMemoryBuffer, InkwellModule, LLVMBackendConfig, LLVMCallbacks}; | ||
use wasmer_llvm_backend_tests::{get_compiler, wat2wasm}; | ||
use wasmer_runtime::imports; | ||
use wasmer_runtime_core::compile_with; | ||
use wasmer_runtime::{imports, CompilerConfig}; | ||
use wasmer_runtime_core::{backend::BackendCompilerConfig, compile_with, compile_with_config}; | ||
|
||
use std::cell::RefCell; | ||
use std::rc::Rc; | ||
|
||
#[test] | ||
fn crash_return_with_float_on_stack() { | ||
const MODULE: &str = r#" | ||
(module | ||
(type (;0;) (func)) | ||
(type (;1;) (func (param f64) (result f64))) | ||
(type (func)) | ||
(type (func (param f64) (result f64))) | ||
(func $_start (type 0)) | ||
(func $fmod (type 1) (param f64) (result f64) | ||
local.get 0 | ||
f64.const 0x0p+0 (;=0;) | ||
f64.const 0x0p+0 | ||
f64.mul | ||
return) | ||
) | ||
return)) | ||
"#; | ||
let wasm_binary = wat2wasm(MODULE.as_bytes()).expect("WAST not valid or malformed"); | ||
let module = compile_with(&wasm_binary, &get_compiler()).unwrap(); | ||
module.instantiate(&imports! {}).unwrap(); | ||
} | ||
|
||
#[derive(Debug, Default)] | ||
pub struct RecordPreOptIR { | ||
preopt_ir: String, | ||
} | ||
|
||
impl LLVMCallbacks for RecordPreOptIR { | ||
fn preopt_ir_callback(&mut self, module: &InkwellModule) { | ||
self.preopt_ir = module.print_to_string().to_string(); | ||
} | ||
} | ||
|
||
#[test] | ||
fn crash_select_with_mismatched_pending() { | ||
const MODULE: &str = r#" | ||
const WAT: &str = r#" | ||
(module | ||
(func (param f64) | ||
f64.const 0x0p+0 (;=0;) | ||
(func (param f64) (result f64) | ||
f64.const 0x0p+0 | ||
local.get 0 | ||
f64.add | ||
f64.const 0x0p+0 (;=0;) | ||
f64.const 0x0p+0 | ||
i32.const 0 | ||
select | ||
drop)) | ||
select)) | ||
"#; | ||
let wasm_binary = wat2wasm(MODULE.as_bytes()).expect("WAST not valid or malformed"); | ||
let module = compile_with(&wasm_binary, &get_compiler()).unwrap(); | ||
let record_pre_opt_ir = Rc::new(RefCell::new(RecordPreOptIR::default())); | ||
let compiler_config = CompilerConfig { | ||
backend_specific_config: Some(BackendCompilerConfig(Box::new(LLVMBackendConfig { | ||
callbacks: Some(record_pre_opt_ir.clone()), | ||
}))), | ||
..Default::default() | ||
}; | ||
let wasm_binary = wat2wasm(WAT.as_bytes()).expect("WAST not valid or malformed"); | ||
let module = compile_with_config(&wasm_binary, &get_compiler(), compiler_config).unwrap(); | ||
module.instantiate(&imports! {}).unwrap(); | ||
const LLVM: &str = r#" | ||
%s3 = fadd double 0.000000e+00, %s2 | ||
%nan = fcmp uno double %s3, 0.000000e+00 | ||
%2 = select i1 %nan, double 0x7FF8000000000000, double %s3 | ||
%s5 = select i1 false, double %2, double 0.000000e+00 | ||
br label %return | ||
"#; | ||
assert!(&record_pre_opt_ir.borrow().preopt_ir.contains(LLVM)); | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters