Remove dependency of ui test on whether rust-src is installed
diff --git a/macro/src/expand.rs b/macro/src/expand.rs
index f28d955..431fd3b 100644
--- a/macro/src/expand.rs
+++ b/macro/src/expand.rs
@@ -31,11 +31,7 @@
for api in apis {
if let Api::RustType(ety) = api {
expanded.extend(expand_rust_type(ety));
- let ident = &ety.ident;
- let span = ident.span();
- hidden.extend(quote_spanned! {span=>
- let _ = ::std::ptr::read::<#ident>;
- });
+ hidden.extend(expand_rust_type_assert_sized(ety));
}
}
@@ -426,6 +422,28 @@
}
}
+fn expand_rust_type_assert_sized(ety: &ExternType) -> TokenStream {
+ // Rustc will render as follows if not sized:
+ //
+ // type TheirType;
+ // -----^^^^^^^^^-
+ // | |
+ // | doesn't have a size known at compile-time
+ // required by this bound in `ffi::_::__AssertSized`
+
+ let ident = &ety.ident;
+ let begin_span = Token;
+ let sized = quote_spanned! {ety.semi_token.span=>
+ #begin_span std::marker::Sized
+ };
+ quote_spanned! {ident.span()=>
+ let _ = {
+ fn __AssertSized<T: ?#sized + #sized>() {}
+ __AssertSized::<#ident>
+ };
+ }
+}
+
fn expand_rust_function_shim(namespace: &Namespace, efn: &ExternFn, types: &Types) -> TokenStream {
let ident = &efn.ident;
let link_name = mangle::extern_fn(namespace, efn);