Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

"overflow evaluating the requirement" documenting synstructures in rustdoc beta, but not rustdoc stable nor rustc beta #62573

Closed
daboross opened this issue Jul 10, 2019 · 2 comments
Labels
T-rustdoc Relevant to the rustdoc team, which will review and decide on the PR/issue.

Comments

@daboross
Copy link
Contributor

daboross commented Jul 10, 2019

I'm in a project which depends on both syn and synstructures crates. Using rustc 1.37.0-beta.2 or rustc 1.38.0-nightly (78ca1bda3 2019-07-08), I can no longer document this crate with its dependencies.

The following error occurs:

$ cargo doc 
  Downloaded synstructure v0.11.0
 Documenting synstructure v0.11.0
    Checking synstructure v0.11.0
error[E0275]: overflow evaluating the requirement `alloc::raw_vec::RawVec<(syn::Lifetime, syn::token::Add)>: std::marker::Unpin`
  |
  = help: consider adding a `#![recursion_limit="128"]` attribute to your crate
  = note: required because it appears within the type `std::vec::Vec<(syn::Lifetime, syn::token::Add)>`
  = note: required because it appears within the type `syn::punctuated::Punctuated<syn::Lifetime, syn::token::Add>`
  = 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 `(syn::WherePredicate, syn::token::Comma)`
  = note: required because it appears within the type `*const (syn::WherePredicate, syn::token::Comma)`
  = note: required because it appears within the type `std::ptr::Unique<(syn::WherePredicate, syn::token::Comma)>`
  = note: required because it appears within the type `alloc::raw_vec::RawVec<(syn::WherePredicate, syn::token::Comma)>`
  = note: required because it appears within the type `std::vec::Vec<(syn::WherePredicate, syn::token::Comma)>`
  = note: required because it appears within the type `syn::punctuated::Punctuated<syn::WherePredicate, syn::token::Comma>`
  = note: required because it appears within the type `syn::WhereClause`
  = note: required because it appears within the type `std::option::Option<syn::WhereClause>`
  = note: required because it appears within the type `syn::Generics`
  = note: required because it appears within the type `syn::ItemType`
  = note: required because it appears within the type `syn::Item`
  = note: required because it appears within the type `syn::Stmt`
  = note: required because it appears within the type `*const syn::Stmt`
  = note: required because it appears within the type `std::ptr::Unique<syn::Stmt>`
  = note: required because it appears within the type `alloc::raw_vec::RawVec<syn::Stmt>`
  = note: required because it appears within the type `std::vec::Vec<syn::Stmt>`
  = note: required because it appears within the type `syn::Block`
  = note: required because it appears within the type `syn::ExprIf`
  = 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::TypeParam`
  = note: required because it appears within the type `syn::GenericParam`
  = note: required because it appears within the type `*const syn::GenericParam`
  = note: required because it appears within the type `std::ptr::Unique<syn::GenericParam>`
  = note: required because it appears within the type `alloc::raw_vec::RawVec<syn::GenericParam>`
  = note: required because it appears within the type `std::vec::Vec<syn::GenericParam>`
  = note: required because it appears within the type `Structure<'a>`

error: aborting due to previous error

For more information about this error, try `rustc --explain E0275`.
error: Could not document `synstructure`.

Caused by:
  process didn't exit successfully: `rustdoc --crate-name synstructure /home/daboross/.cargo/registry/src/github.com-1ecc6299db9ec823/synstructure-0.11.0/src/lib.rs --cap-lints allow --color always -o /home/daboross/stest/target/doc -L dependency=/home/daboross/stest/target/debug/deps --extern proc_macro2=/home/daboross/stest/target/debug/deps/libproc_macro2-5a0d9421c670a9a2.rmeta --extern quote=/home/daboross/stest/target/debug/deps/libquote-0b983089d60fae1d.rmeta --extern syn=/home/daboross/stest/target/debug/deps/libsyn-1579b4397ac9fb62.rmeta --extern unicode_xid=/home/daboross/stest/target/debug/deps/libunicode_xid-83d32fbf12bd2baf.rmeta` (exit code: 1)
warning: build failed, waiting for other jobs to finish...
error: build failed

To reproduce, create an empty new project, and add the following dependencies:

synstructure = "0.11"
syn = { version = "0.15", features = ["full"] }

Running cargo +stable doc with rust 1.36.0 succeeds, but running cargo +beta doc fails with the above error. Strangely, the crate continues to compile fine - it's only running cargo doc which fails.

Being more precise, this succeeds in nightly-2019-06-21, and fails in nightly-2019-06-22.

I'm guessing that this could just be an issue with synstructure, but the fact that it failed with a rustc upgrade combined with the fact that it fails in cargo doc but not cargo build or cargo test makes me think there could be some other issue here?

Full `Cargo.toml`
[package]
name = "stest"
version = "0.1.0"
authors = ["David Ross <[email protected]>"]
edition = "2018"

# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html

[dependencies]
synstructure = "0.11"
syn = { version = "0.15", features = ["full"] }
Full `Cargo.lock`
# This file is automatically @generated by Cargo.
# It is not intended for manual editing.
[[package]]
name = "proc-macro2"
version = "0.4.30"
source = "registry+https://github.com/rust-lang/crates.io-index"
dependencies = [
 "unicode-xid 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)",
]

[[package]]
name = "quote"
version = "0.6.12"
source = "registry+https://github.com/rust-lang/crates.io-index"
dependencies = [
 "proc-macro2 0.4.30 (registry+https://github.com/rust-lang/crates.io-index)",
]

[[package]]
name = "stest"
version = "0.1.0"
dependencies = [
 "syn 0.15.39 (registry+https://github.com/rust-lang/crates.io-index)",
 "synstructure 0.11.0 (registry+https://github.com/rust-lang/crates.io-index)",
]

[[package]]
name = "syn"
version = "0.15.39"
source = "registry+https://github.com/rust-lang/crates.io-index"
dependencies = [
 "proc-macro2 0.4.30 (registry+https://github.com/rust-lang/crates.io-index)",
 "quote 0.6.12 (registry+https://github.com/rust-lang/crates.io-index)",
 "unicode-xid 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)",
]

[[package]]
name = "synstructure"
version = "0.11.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
dependencies = [
 "proc-macro2 0.4.30 (registry+https://github.com/rust-lang/crates.io-index)",
 "quote 0.6.12 (registry+https://github.com/rust-lang/crates.io-index)",
 "syn 0.15.39 (registry+https://github.com/rust-lang/crates.io-index)",
 "unicode-xid 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)",
]

[[package]]
name = "unicode-xid"
version = "0.1.0"
source = "registry+https://github.com/rust-lang/crates.io-index"

[metadata]
"checksum proc-macro2 0.4.30 (registry+https://github.com/rust-lang/crates.io-index)" = "cf3d2011ab5c909338f7887f4fc896d35932e29146c12c8d01da6b22a80ba759"
"checksum quote 0.6.12 (registry+https://github.com/rust-lang/crates.io-index)" = "faf4799c5d274f3868a4aae320a0a182cbd2baee377b378f080e16a23e9d80db"
"checksum syn 0.15.39 (registry+https://github.com/rust-lang/crates.io-index)" = "b4d960b829a55e56db167e861ddb43602c003c7be0bee1d345021703fac2fb7c"
"checksum synstructure 0.11.0 (registry+https://github.com/rust-lang/crates.io-index)" = "8a31c862c910b86af7938de3a4f176e89c4dfcb484d119593d456b86c3f0f8ea"
"checksum unicode-xid 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)" = "fc72304796d0818e357ead4e000d19c9c174ab23dc11093ac919054d20a6a7fc"
@daboross daboross reopened this Jul 10, 2019
@daboross daboross changed the title "overflow evluating the requirement" documenting synstructures in beta "overflow evaluating the requirement" documenting synstructures in rustdoc beta Jul 10, 2019
@daboross daboross changed the title "overflow evaluating the requirement" documenting synstructures in rustdoc beta "overflow evaluating the requirement" documenting synstructures in rustdoc beta, but not rustdoc stable nor rustc beta Jul 10, 2019
@Centril Centril added the T-rustdoc Relevant to the rustdoc team, which will review and decide on the PR/issue. label Jul 10, 2019
@Centril
Copy link
Contributor

Centril commented Jul 10, 2019

cc @nagisa

@nagisa
Copy link
Member

nagisa commented Jul 11, 2019

Duplicate of #62059.

@nagisa nagisa closed this as completed Jul 11, 2019
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
T-rustdoc Relevant to the rustdoc team, which will review and decide on the PR/issue.
Projects
None yet
Development

No branches or pull requests

3 participants