From 4c1b9e5870937c4c4989bedc14b44da73060b49e Mon Sep 17 00:00:00 2001 From: oxalica Date: Mon, 21 Oct 2019 12:24:33 +0800 Subject: [PATCH] Fix compile error with `dyn` types --- .../src/pin_project/derive.rs | 16 +++++----- tests/ui/pin_project/run-pass/dyn-type.rs | 29 +++++++++++++++++++ 2 files changed, 37 insertions(+), 8 deletions(-) create mode 100644 tests/ui/pin_project/run-pass/dyn-type.rs diff --git a/pin-project-internal/src/pin_project/derive.rs b/pin-project-internal/src/pin_project/derive.rs index f049aed5..ca0b7ea3 100644 --- a/pin-project-internal/src/pin_project/derive.rs +++ b/pin-project-internal/src/pin_project/derive.rs @@ -370,10 +370,10 @@ impl<'a> Context<'a> { let lifetime = &self.proj.lifetime; proj_fields.push(quote! { - #vis #ident: ::core::pin::Pin<&#lifetime mut #ty> + #vis #ident: ::core::pin::Pin<&#lifetime mut (#ty)> }); proj_ref_fields.push(quote! { - #vis #ident: ::core::pin::Pin<&#lifetime #ty> + #vis #ident: ::core::pin::Pin<&#lifetime (#ty)> }); proj_body.push(quote! { #ident: ::core::pin::Pin::new_unchecked(#ident) @@ -381,10 +381,10 @@ impl<'a> Context<'a> { } else { let lifetime = &self.proj.lifetime; proj_fields.push(quote! { - #vis #ident: &#lifetime mut #ty + #vis #ident: &#lifetime mut (#ty) }); proj_ref_fields.push(quote! { - #vis #ident: &#lifetime #ty + #vis #ident: &#lifetime (#ty) }); proj_body.push(quote! { #ident @@ -417,10 +417,10 @@ impl<'a> Context<'a> { let lifetime = &self.proj.lifetime; proj_fields.push(quote! { - #vis ::core::pin::Pin<&#lifetime mut #ty> + #vis ::core::pin::Pin<&#lifetime mut (#ty)> }); proj_ref_fields.push(quote! { - #vis ::core::pin::Pin<&#lifetime #ty> + #vis ::core::pin::Pin<&#lifetime (#ty)> }); proj_body.push(quote! { ::core::pin::Pin::new_unchecked(#id) @@ -428,10 +428,10 @@ impl<'a> Context<'a> { } else { let lifetime = &self.proj.lifetime; proj_fields.push(quote! { - #vis &#lifetime mut #ty + #vis &#lifetime mut (#ty) }); proj_ref_fields.push(quote! { - #vis &#lifetime #ty + #vis &#lifetime (#ty) }); proj_body.push(quote! { #id diff --git a/tests/ui/pin_project/run-pass/dyn-type.rs b/tests/ui/pin_project/run-pass/dyn-type.rs new file mode 100644 index 00000000..32b2c9f7 --- /dev/null +++ b/tests/ui/pin_project/run-pass/dyn-type.rs @@ -0,0 +1,29 @@ +use pin_project::pin_project; + +#[pin_project] +struct Struct1 { + a: i32, + f: dyn std::fmt::Debug, +} + +#[pin_project] +struct Struct2 { + a: i32, + #[pin] + f: dyn std::fmt::Debug, +} + +#[pin_project] +struct Struct3 { + a: i32, + f: dyn std::fmt::Debug + Send, +} + +#[pin_project] +struct Struct4 { + a: i32, + #[pin] + f: dyn std::fmt::Debug + Send, +} + +fn main() {}