diff --git a/cranelift/faerie/src/backend.rs b/cranelift/faerie/src/backend.rs index 2520515cd7..2518893974 100644 --- a/cranelift/faerie/src/backend.rs +++ b/cranelift/faerie/src/backend.rs @@ -152,11 +152,11 @@ impl Backend for FaerieBackend { ctx: &cranelift_codegen::Context, namespace: &ModuleNamespace, total_size: u32, - ) -> ModuleResult<(FaerieCompiledFunction, Option<&Vec>)> { + ) -> ModuleResult<(FaerieCompiledFunction, &[TrapSite])> { let mut code: Vec = vec![0; total_size as usize]; // TODO: Replace this with FaerieStackmapSink once it is implemented. let mut stackmap_sink = NullStackmapSink {}; - let mut traps = None; + let mut traps: &[TrapSite] = &[]; // Non-lexical lifetimes would obviate the braces here. { @@ -179,7 +179,7 @@ impl Backend for FaerieBackend { &mut stackmap_sink, ) }; - traps = Some(trap_manifest.add_sink(trap_sink)); + traps = trap_manifest.add_sink(trap_sink); } else { let mut trap_sink = NullTrapSink {}; unsafe { @@ -211,16 +211,16 @@ impl Backend for FaerieBackend { bytes: &[u8], _namespace: &ModuleNamespace, traps: Vec, - ) -> ModuleResult<(FaerieCompiledFunction, Option<&Vec>)> { + ) -> ModuleResult<(FaerieCompiledFunction, &[TrapSite])> { let code_length: u32 = match bytes.len().try_into() { Ok(code_length) => code_length, _ => Err(ModuleError::FunctionTooLarge(name.to_string()))?, }; - let mut ret_traps = None; + let mut ret_traps: &[TrapSite] = &[]; if let Some(ref mut trap_manifest) = self.trap_manifest { let trap_sink = FaerieTrapSink::new_with_sites(name, code_length, traps); - ret_traps = Some(trap_manifest.add_sink(trap_sink)); + ret_traps = trap_manifest.add_sink(trap_sink); } self.artifact diff --git a/cranelift/faerie/src/traps.rs b/cranelift/faerie/src/traps.rs index f98a4384bc..d3bd041d94 100644 --- a/cranelift/faerie/src/traps.rs +++ b/cranelift/faerie/src/traps.rs @@ -59,7 +59,7 @@ impl FaerieTrapManifest { } /// Put a `FaerieTrapSink` into manifest - pub fn add_sink(&mut self, sink: FaerieTrapSink) -> &Vec { + pub fn add_sink(&mut self, sink: FaerieTrapSink) -> &[TrapSite] { self.sinks.push(sink); &self.sinks.last().unwrap().sites } diff --git a/cranelift/module/src/backend.rs b/cranelift/module/src/backend.rs index bc10d30a54..9333e5f570 100644 --- a/cranelift/module/src/backend.rs +++ b/cranelift/module/src/backend.rs @@ -86,7 +86,7 @@ where ctx: &Context, namespace: &ModuleNamespace, code_size: u32, - ) -> ModuleResult<(Self::CompiledFunction, Option<&Vec>)>; + ) -> ModuleResult<(Self::CompiledFunction, &[TrapSite])>; /// Define a function, taking the function body from the given `bytes`. /// @@ -98,7 +98,7 @@ where bytes: &[u8], namespace: &ModuleNamespace, traps: Vec, - ) -> ModuleResult<(Self::CompiledFunction, Option<&Vec>)>; + ) -> ModuleResult<(Self::CompiledFunction, &[TrapSite])>; /// Define a zero-initialized data object of the given size. /// diff --git a/cranelift/module/src/module.rs b/cranelift/module/src/module.rs index 56d4593440..daa83c2956 100644 --- a/cranelift/module/src/module.rs +++ b/cranelift/module/src/module.rs @@ -354,7 +354,7 @@ where pub struct ModuleCompiledFunction<'a> { pub size: binemit::CodeOffset, - pub traps: Option<&'a Vec>, + pub traps: &'a [TrapSite], } impl Module diff --git a/cranelift/object/src/backend.rs b/cranelift/object/src/backend.rs index 60570ae794..c65dfe0024 100644 --- a/cranelift/object/src/backend.rs +++ b/cranelift/object/src/backend.rs @@ -189,7 +189,7 @@ impl Backend for ObjectBackend { ctx: &cranelift_codegen::Context, _namespace: &ModuleNamespace, code_size: u32, - ) -> ModuleResult<(ObjectCompiledFunction, Option<&Vec>)> { + ) -> ModuleResult<(ObjectCompiledFunction, &[TrapSite])> { let mut code: Vec = vec![0; code_size as usize]; let mut reloc_sink = ObjectRelocSink::new(self.object.format()); let mut trap_sink = ObjectTrapSink::default(); @@ -232,7 +232,7 @@ impl Backend for ObjectBackend { } let trapref = self.traps.index_mut(func_id); *trapref = trap_sink.sites; - Ok((ObjectCompiledFunction, Some(trapref))) + Ok((ObjectCompiledFunction, trapref)) } fn define_function_bytes( @@ -242,7 +242,7 @@ impl Backend for ObjectBackend { bytes: &[u8], _namespace: &ModuleNamespace, traps: Vec, - ) -> ModuleResult<(ObjectCompiledFunction, Option<&Vec>)> { + ) -> ModuleResult<(ObjectCompiledFunction, &[TrapSite])> { let symbol = self.functions[func_id].unwrap(); let section = self.object.section_id(StandardSection::Text); let _offset = self @@ -250,7 +250,7 @@ impl Backend for ObjectBackend { .add_symbol_data(symbol, section, bytes, self.function_alignment); let trapref = self.traps.index_mut(func_id); *trapref = traps; - Ok((ObjectCompiledFunction, Some(trapref))) + Ok((ObjectCompiledFunction, trapref)) } fn define_data( diff --git a/cranelift/simplejit/src/backend.rs b/cranelift/simplejit/src/backend.rs index 0e9b49dbcd..22a7c4b36b 100644 --- a/cranelift/simplejit/src/backend.rs +++ b/cranelift/simplejit/src/backend.rs @@ -278,7 +278,7 @@ impl<'simple_jit_backend> Backend for SimpleJITBackend { ctx: &cranelift_codegen::Context, _namespace: &ModuleNamespace, code_size: u32, - ) -> ModuleResult<(Self::CompiledFunction, Option<&Vec>)> { + ) -> ModuleResult<(Self::CompiledFunction, &[TrapSite])> { let size = code_size as usize; let ptr = self .memory @@ -309,7 +309,7 @@ impl<'simple_jit_backend> Backend for SimpleJITBackend { size, relocs: reloc_sink.relocs, }, - None, + &[], )) } @@ -320,7 +320,7 @@ impl<'simple_jit_backend> Backend for SimpleJITBackend { bytes: &[u8], _namespace: &ModuleNamespace, _traps: Vec, - ) -> ModuleResult<(Self::CompiledFunction, Option<&Vec>)> { + ) -> ModuleResult<(Self::CompiledFunction, &[TrapSite])> { let size = bytes.len(); let ptr = self .memory @@ -340,7 +340,7 @@ impl<'simple_jit_backend> Backend for SimpleJITBackend { size, relocs: vec![], }, - None, + &[], )) }