Closed
Description
It looks like the latest nightly rustc
overflowed while trying to prove proc_macro2::Group
satisfies the Unpin
oibit.
Strangely, I couldn't reproduce this by adding just proc-macro2
to a dummy project and building. It needed to be used by another crate (may have something to do with generics or feature flags?).
Documenting proc-macro2 v0.4.30
Checking proc-macro2 v0.4.30
...
error[E0275]: overflow evaluating the requirement `proc_macro2::Group: std::marker::Unpin`
|
= help: consider adding a `#![recursion_limit="128"]` attribute to your crate
= note: required because it appears within the type `proc_macro2::TokenTree`
= note: required because it appears within the type `*const proc_macro2::TokenTree`
= note: required because it appears within the type `std::ptr::Unique<proc_macro2::TokenTree>`
= note: required because it appears within the type `alloc::raw_vec::RawVec<proc_macro2::TokenTree>`
= note: required because it appears within the type `std::vec::Vec<proc_macro2::TokenTree>`
= note: required because it appears within the type `proc_macro2::fallback::TokenStream`
= note: required because it appears within the type `proc_macro2::imp::TokenStream`
= note: required because it appears within the type `proc_macro2::TokenStream`
= note: required because it appears within the type `syn::Macro`
= note: required because it appears within the type `syn::PatMacro`
= note: required because it appears within the type `syn::Pat`
= note: required because it appears within the type `(syn::Pat, syn::token::Or)`
= note: required because it appears within the type `*const (syn::Pat, syn::token::Or)`
= note: required because it appears within the type `std::ptr::Unique<(syn::Pat, syn::token::Or)>`
= note: required because it appears within the type `alloc::raw_vec::RawVec<(syn::Pat, syn::token::Or)>`
= note: required because it appears within the type `std::vec::Vec<(syn::Pat, syn::token::Or)>`
= note: required because it appears within the type `syn::punctuated::Punctuated<syn::Pat, syn::token::Or>`
= note: required because it appears within the type `syn::ExprLet`
= note: required because it appears within the type `syn::Expr`
= note: required because it appears within the type `syn::TypeArray`
= note: required because it appears within the type `syn::Type`
= note: required because it appears within the type `syn::GenericArgument`
= note: required because it appears within the type `(syn::GenericArgument, syn::token::Comma)`
= note: required because it appears within the type `*const (syn::GenericArgument, syn::token::Comma)`
= note: required because it appears within the type `std::ptr::Unique<(syn::GenericArgument, syn::token::Comma)>`
= note: required because it appears within the type `alloc::raw_vec::RawVec<(syn::GenericArgument, syn::token::Comma)>`
= note: required because it appears within the type `std::vec::Vec<(syn::GenericArgument, syn::token::Comma)>`
= note: required because it appears within the type `syn::punctuated::Punctuated<syn::GenericArgument, syn::token::Comma>`
= note: required because it appears within the type `syn::AngleBracketedGenericArguments`
= note: required because it appears within the type `syn::PathArguments`
= note: required because it appears within the type `syn::PathSegment`
= note: required because it appears within the type `(syn::PathSegment, syn::token::Colon2)`
= note: required because it appears within the type `*const (syn::PathSegment, syn::token::Colon2)`
= note: required because it appears within the type `std::ptr::Unique<(syn::PathSegment, syn::token::Colon2)>`
= note: required because it appears within the type `alloc::raw_vec::RawVec<(syn::PathSegment, syn::token::Colon2)>`
= note: required because it appears within the type `std::vec::Vec<(syn::PathSegment, syn::token::Colon2)>`
= note: required because it appears within the type `syn::punctuated::Punctuated<syn::PathSegment, syn::token::Colon2>`
= note: required because it appears within the type `syn::Path`
= note: required because it appears within the type `syn::Attribute`
= note: required because it appears within the type `*const syn::Attribute`
= note: required because it appears within the type `std::ptr::Unique<syn::Attribute>`
= note: required because it appears within the type `alloc::raw_vec::RawVec<syn::Attribute>`
= note: required because it appears within the type `std::vec::Vec<syn::Attribute>`
= note: required because it appears within the type `syn::LifetimeDef`
= note: required because it appears within the type `(syn::LifetimeDef, syn::token::Comma)`
= note: required because it appears within the type `*const (syn::LifetimeDef, syn::token::Comma)`
= note: required because it appears within the type `std::ptr::Unique<(syn::LifetimeDef, syn::token::Comma)>`
= note: required because it appears within the type `alloc::raw_vec::RawVec<(syn::LifetimeDef, syn::token::Comma)>`
= note: required because it appears within the type `std::vec::Vec<(syn::LifetimeDef, syn::token::Comma)>`
= note: required because it appears within the type `syn::punctuated::Punctuated<syn::LifetimeDef, syn::token::Comma>`
= note: required because it appears within the type `syn::BoundLifetimes`
= note: required because it appears within the type `std::option::Option<syn::BoundLifetimes>`
= note: required because it appears within the type `syn::PredicateType`
= note: required because it appears within the type `syn::WherePredicate`
= note: required because it appears within the type `*const syn::WherePredicate`
= note: required because it appears within the type `std::ptr::Unique<syn::WherePredicate>`
= note: required because it appears within the type `alloc::raw_vec::RawVec<syn::WherePredicate>`
= note: required because it appears within the type `std::vec::Vec<syn::WherePredicate>`
= note: required because it appears within the type `std::option::Option<std::vec::Vec<syn::WherePredicate>>`
= note: required because it appears within the type `attr::InputClone`
= note: required because it appears within the type `std::option::Option<attr::InputClone>`
= note: required because it appears within the type `attr::Input`
= note: required because it appears within the type `ast::Input<'a>`
error: aborting due to previous error
I was able to reproduce this quite reliably by doing the following on my Linux laptop:
$ rustc --version
rustc 1.37.0-nightly (8aa42ed7c 2019-06-24)
$ cargo --version
cargo 1.37.0-nightly (807429e1b 2019-06-11)
$ cd /tmp
$cargo new --lib whatever
Created library `whatever` package
$ cd whatever
$ cargo add specs
Adding specs v0.14.3 to dependencies
$ cargo doc
BOOM!!1!
Metadata
Metadata
Assignees
Labels
No labels