Fix SimpleJIT tests

This commit is contained in:
bjorn3
2020-09-30 19:58:12 +02:00
parent d84ca235d2
commit 9ccf837092
2 changed files with 13 additions and 27 deletions

View File

@@ -1,12 +1,12 @@
use cranelift::prelude::*; use cranelift::prelude::*;
use cranelift_codegen::binemit::NullTrapSink; use cranelift_codegen::binemit::NullTrapSink;
use cranelift_module::{default_libcall_names, Linkage, Module}; use cranelift_module::{default_libcall_names, Linkage, Module};
use cranelift_simplejit::{SimpleJITBackend, SimpleJITBuilder}; use cranelift_simplejit::{SimpleJITBuilder, SimpleJITModule};
use std::mem; use std::mem;
fn main() { fn main() {
let mut module: Module<SimpleJITBackend> = let mut module: SimpleJITModule =
Module::new(SimpleJITBuilder::new(default_libcall_names())); SimpleJITModule::new(SimpleJITBuilder::new(default_libcall_names()));
let mut ctx = module.make_context(); let mut ctx = module.make_context();
let mut func_ctx = FunctionBuilderContext::new(); let mut func_ctx = FunctionBuilderContext::new();
@@ -70,10 +70,10 @@ fn main() {
module.clear_context(&mut ctx); module.clear_context(&mut ctx);
// Perform linking. // Perform linking.
module.finalize_definitions(); let product = module.finish();
// Get a raw pointer to the generated code. // Get a raw pointer to the generated code.
let code_b = module.get_finalized_function(func_b); let code_b = product.lookup_func(func_b);
// Cast it to a rust function pointer type. // Cast it to a rust function pointer type.
let ptr_b = unsafe { mem::transmute::<_, fn() -> u32>(code_b) }; let ptr_b = unsafe { mem::transmute::<_, fn() -> u32>(code_b) };

View File

@@ -9,8 +9,8 @@ use cranelift_simplejit::*;
#[test] #[test]
fn error_on_incompatible_sig_in_declare_function() { fn error_on_incompatible_sig_in_declare_function() {
let mut module: Module<SimpleJITBackend> = let mut module: SimpleJITModule =
Module::new(SimpleJITBuilder::new(default_libcall_names())); SimpleJITModule::new(SimpleJITBuilder::new(default_libcall_names()));
let mut sig = Signature { let mut sig = Signature {
params: vec![AbiParam::new(types::I64)], params: vec![AbiParam::new(types::I64)],
returns: vec![], returns: vec![],
@@ -26,7 +26,7 @@ fn error_on_incompatible_sig_in_declare_function() {
.unwrap(); // Make sure this is an error .unwrap(); // Make sure this is an error
} }
fn define_simple_function(module: &mut Module<SimpleJITBackend>) -> FuncId { fn define_simple_function(module: &mut SimpleJITModule) -> FuncId {
let sig = Signature { let sig = Signature {
params: vec![], params: vec![],
returns: vec![], returns: vec![],
@@ -55,27 +55,13 @@ fn define_simple_function(module: &mut Module<SimpleJITBackend>) -> FuncId {
func_id func_id
} }
#[test]
fn double_finalize() {
let mut module: Module<SimpleJITBackend> =
Module::new(SimpleJITBuilder::new(default_libcall_names()));
define_simple_function(&mut module);
module.finalize_definitions();
// Calling `finalize_definitions` a second time without any new definitions
// should have no effect.
module.finalize_definitions();
}
#[test] #[test]
#[should_panic(expected = "Result::unwrap()` on an `Err` value: DuplicateDefinition(\"abc\")")] #[should_panic(expected = "Result::unwrap()` on an `Err` value: DuplicateDefinition(\"abc\")")]
fn panic_on_define_after_finalize() { fn panic_on_define_after_finalize() {
let mut module: Module<SimpleJITBackend> = let mut module: SimpleJITModule =
Module::new(SimpleJITBuilder::new(default_libcall_names())); SimpleJITModule::new(SimpleJITBuilder::new(default_libcall_names()));
define_simple_function(&mut module); define_simple_function(&mut module);
module.finalize_definitions();
define_simple_function(&mut module); define_simple_function(&mut module);
} }
@@ -154,8 +140,8 @@ fn switch_error() {
#[test] #[test]
fn libcall_function() { fn libcall_function() {
let mut module: Module<SimpleJITBackend> = let mut module: SimpleJITModule =
Module::new(SimpleJITBuilder::new(default_libcall_names())); SimpleJITModule::new(SimpleJITBuilder::new(default_libcall_names()));
let sig = Signature { let sig = Signature {
params: vec![], params: vec![],
@@ -200,5 +186,5 @@ fn libcall_function() {
.define_function(func_id, &mut ctx, &mut trap_sink) .define_function(func_id, &mut ctx, &mut trap_sink)
.unwrap(); .unwrap();
module.finalize_definitions(); module.finish();
} }