diff --git a/crates/wiggle/generate/src/types/struct.rs b/crates/wiggle/generate/src/types/struct.rs index 5b3a025904..a2b1e93992 100644 --- a/crates/wiggle/generate/src/types/struct.rs +++ b/crates/wiggle/generate/src/types/struct.rs @@ -19,7 +19,14 @@ pub(super) fn define_struct( let member_decls = s.members.iter().map(|m| { let name = names.struct_member(&m.name); let type_ = match &m.tref { - witx::TypeRef::Name(nt) => names.type_(&nt.name), + witx::TypeRef::Name(nt) => { + let tt = names.type_(&nt.name); + if m.tref.needs_lifetime() { + quote!(#tt<'a>) + } else { + quote!(#tt) + } + }, witx::TypeRef::Value(ty) => match &**ty { witx::Type::Builtin(builtin) => names.builtin_type(*builtin, quote!('a)), witx::Type::Pointer(pointee) | witx::Type::ConstPointer(pointee) => { diff --git a/crates/wiggle/tests/structs.rs b/crates/wiggle/tests/structs.rs index b98cf66163..cb8b7ef694 100644 --- a/crates/wiggle/tests/structs.rs +++ b/crates/wiggle/tests/structs.rs @@ -52,6 +52,10 @@ impl<'a> structs::Structs for WasiCtx<'a> { second: *second, }) } + + fn sum_array<'b>(&self, an_arr: &types::StructOfArray<'b>) -> Result { + Ok(0) + } } #[derive(Debug)]