Handle pinned returned reference to improper ctype extern type
diff --git a/macro/src/expand.rs b/macro/src/expand.rs
index 73e2edf..12e4fe0 100644
--- a/macro/src/expand.rs
+++ b/macro/src/expand.rs
@@ -619,7 +619,11 @@
                     },
                     inner if types.is_considered_improper_ctype(inner) => {
                         let mutability = ty.mutability;
-                        quote!(&#mutability *#call.cast())
+                        let deref_mut = quote!(&#mutability *#call.cast());
+                        match ty.pinned {
+                            false => deref_mut,
+                            true => quote!(::std::pin::Pin::new_unchecked(#deref_mut)),
+                        }
                     }
                     _ => call,
                 },