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

error[E0275]: overflow evaluating the requirement only with incremental build involved #56629

Open
upsuper opened this issue Dec 8, 2018 · 1 comment
Labels
A-incr-comp Area: Incremental compilation C-bug Category: This is a bug. T-compiler Relevant to the compiler team, which will review and decide on the PR/issue.

Comments

@upsuper
Copy link
Contributor

upsuper commented Dec 8, 2018

Steps to reproduce:

  1. clone https://github.com/upsuper/telegram-rustevalbot (and checkout 2502973017d39a867dc2cde089b535127bc86e3b which is what I'm currently seeing)
  2. run cargo build
  3. then run cargo build again

It builds correctly in step 2, but fails in step 3 and shows the following error:

error[E0275]: overflow evaluating the requirement `http::response::Parts: std::marker::Send`                   
  |                                                                                                            
  = help: consider adding a `#![recursion_limit="128"]` attribute to your crate                                
  = note: required because it appears within the type `http::response::Response<()>`                           
  = note: required because it appears within the type `h2::proto::peer::PollMessage`                           
  = note: required because it appears within the type `h2::proto::streams::recv::Event`                        
  = note: required because it appears within the type `h2::proto::streams::buffer::Slot<h2::proto::streams::recv::Event>`
  = note: required because it appears within the type `slab::Entry<h2::proto::streams::buffer::Slot<h2::proto::streams::recv::Event>>`
  = note: required because of the requirements on the impl of `std::marker::Send` for `std::ptr::Unique<slab::Entry<h2::proto::streams::buffer::Slot<h2::proto::streams::recv::Event>>>`
  = note: required because it appears within the type `alloc::raw_vec::RawVec<slab::Entry<h2::proto::streams::buffer::Slot<h2::proto::streams::recv::Event>>>`
  = note: required because it appears within the type `std::vec::Vec<slab::Entry<h2::proto::streams::buffer::Slot<h2::proto::streams::recv::Event>>>`
  = note: required because it appears within the type `slab::Slab<h2::proto::streams::buffer::Slot<h2::proto::streams::recv::Event>>`
  = note: required because it appears within the type `h2::proto::streams::buffer::Buffer<h2::proto::streams::recv::Event>`
  = note: required because it appears within the type `h2::proto::streams::recv::Recv`                         
  = note: required because it appears within the type `h2::proto::streams::streams::Actions`                   
  = note: required because it appears within the type `h2::proto::streams::streams::Inner`                     
  = note: required because of the requirements on the impl of `std::marker::Send` for `std::sync::Mutex<h2::proto::streams::streams::Inner>`
  = note: required because of the requirements on the impl of `std::marker::Send` for `std::sync::Arc<std::sync::Mutex<h2::proto::streams::streams::Inner>>`
  = note: required because it appears within the type `h2::proto::streams::streams::OpaqueStreamRef`           
  = note: required because it appears within the type `h2::share::ReleaseCapacity`                             
  = note: required because it appears within the type `h2::share::RecvStream`                                  
  = note: required because it appears within the type `hyper::body::body::Kind`                                
  = note: required because it appears within the type `hyper::body::body::Body`                                
  = note: required because it appears within the type `http::request::Request<hyper::body::body::Body>`        
  = note: required because it appears within the type `(http::request::Request<hyper::body::body::Body>, hyper::client::dispatch::Callback<http::request::Request<hyper::body::body::Body>, http::response::Response<hyper::body::body::Body>>)`
  = note: required because it appears within the type `std::option::Option<(http::request::Request<hyper::body::body::Body>, hyper::client::dispatch::Callback<http::request::Request<hyper::body::body::Body>, http::response::Response<hyper::body::body::Body>>)>`
  = note: required because it appears within the type `hyper::client::dispatch::Envelope<http::request::Request<hyper::body::body::Body>, http::response::Response<hyper::body::body::Body>>`
  = note: required because of the requirements on the impl of `std::marker::Send` for `futures::sync::mpsc::Inner<hyper::client::dispatch::Envelope<http::request::Request<hyper::body::body::Body>, http::response::Response<hyper::body::body::Body>>>`
  = note: required because of the requirements on the impl of `std::marker::Send` for `std::sync::Arc<futures::sync::mpsc::Inner<hyper::client::dispatch::Envelope<http::request::Request<hyper::body::body::Body>, http::response::Response<hyper::body::body::Body>>>>`
  = note: required because it appears within the type `futures::sync::mpsc::Sender<hyper::client::dispatch::Envelope<http::request::Request<hyper::body::body::Body>, http::response::Response<hyper::body::body::Body>>>`
  = note: required because it appears within the type `futures::sync::mpsc::UnboundedSender<hyper::client::dispatch::Envelope<http::request::Request<hyper::body::body::Body>, http::response::Response<hyper::body::body::Body>>>`
  = note: required because it appears within the type `hyper::client::dispatch::Sender<http::request::Request<hyper::body::body::Body>, http::response::Response<hyper::body::body::Body>>`
  = note: required because it appears within the type `hyper::client::conn::SendRequest<hyper::body::body::Body>`
  = note: required because it appears within the type `hyper::client::PoolTx<hyper::body::body::Body>`         
  = note: required because it appears within the type `hyper::client::PoolClient<hyper::body::body::Body>`     
  = note: required because it appears within the type `hyper::client::pool::Idle<hyper::client::PoolClient<hyper::body::body::Body>>`
  = note: required because of the requirements on the impl of `std::marker::Send` for `std::ptr::Unique<hyper::client::pool::Idle<hyper::client::PoolClient<hyper::body::body::Body>>>`
  = note: required because it appears within the type `alloc::raw_vec::RawVec<hyper::client::pool::Idle<hyper::client::PoolClient<hyper::body::body::Body>>>`
  = note: required because it appears within the type `std::vec::Vec<hyper::client::pool::Idle<hyper::client::PoolClient<hyper::body::body::Body>>>`
  = note: required because it appears within the type `(std::sync::Arc<std::string::String>, std::vec::Vec<hyper::client::pool::Idle<hyper::client::PoolClient<hyper::body::body::Body>>>)`
  = note: required because it appears within the type `std::marker::PhantomData<(std::sync::Arc<std::string::String>, std::vec::Vec<hyper::client::pool::Idle<hyper::client::PoolClient<hyper::body::body::Body>>>)>`
  = note: required because it appears within the type `std::collections::hash::table::RawTable<std::sync::Arc<std::string::String>, std::vec::Vec<hyper::client::pool::Idle<hyper::client::PoolClient<hyper::body::body::Body>>>>`
  = note: required because it appears within the type `std::collections::HashMap<std::sync::Arc<std::string::String>, std::vec::Vec<hyper::client::pool::Idle<hyper::client::PoolClient<hyper::body::body::Body>>>>`
  = note: required because it appears within the type `hyper::client::pool::PoolInner<hyper::client::PoolClient<hyper::body::body::Body>>`
  = note: required because of the requirements on the impl of `std::marker::Send` for `std::sync::Mutex<hyper::client::pool::PoolInner<hyper::client::PoolClient<hyper::body::body::Body>>>`
  = note: required because of the requirements on the impl of `std::marker::Send` for `std::sync::Arc<std::sync::Mutex<hyper::client::pool::PoolInner<hyper::client::PoolClient<hyper::body::body::Body>>>>`
  = note: required because it appears within the type `std::option::Option<std::sync::Arc<std::sync::Mutex<hyper::client::pool::PoolInner<hyper::client::PoolClient<hyper::body::body::Body>>>>>`
  = note: required because it appears within the type `hyper::client::pool::Pool<hyper::client::PoolClient<hyper::body::body::Body>>`
  = note: required because it appears within the type `hyper::client::Client<reqwest::connect::Connector>`     
  = note: required because it appears within the type `reqwest::async_impl::client::ClientRef`                 
  = note: required because of the requirements on the impl of `std::marker::Send` for `std::sync::Arc<reqwest::async_impl::client::ClientRef>`
  = note: required because it appears within the type `reqwest::async_impl::client::PendingRequest`            
  = note: required because it appears within the type `reqwest::async_impl::client::PendingInner`              
  = note: required because it appears within the type `reqwest::async_impl::client::Pending`                   
  = note: required because it appears within the type `futures::future::chain::Chain<reqwest::async_impl::client::Pending, futures::future::result_::FutureResult<reqwest::async_impl::response::Response, reqwest::error::Error>, [closure@src/cratesio/mod.rs:76:23: 76:53]>`
  = note: required because it appears within the type `futures::future::and_then::AndThen<reqwest::async_impl::client::Pending, std::result::Result<reqwest::async_impl::response::Response, reqwest::error::Error>, [closure@src/cratesio/mod.rs:76:23: 76:53]>`
  = note: required because it appears within the type `futures::future::chain::Chain<futures::future::and_then::AndThen<reqwest::async_impl::client::Pending, std::result::Result<reqwest::async_impl::response::Response, reqwest::error::Error>, [closure@src/cratesio/mod.rs:76:23: 76:53]>, reqwest::async_impl::response::Json<cratesio::Summary>, [closure@src/cratesio/mod.rs:77:23: 77:45]>`
  = note: required because it appears within the type `futures::future::and_then::AndThen<futures::future::and_then::AndThen<reqwest::async_impl::client::Pending, std::result::Result<reqwest::async_impl::response::Response, reqwest::error::Error>, [closure@src/cratesio/mod.rs:76:23: 76:53]>, reqwest::async_impl::response::Json<cratesio::Summary>, [closure@src/cratesio/mod.rs:77:23: 77:45]>`
  = note: required because it appears within the type `futures::future::map::Map<futures::future::and_then::AndThen<futures::future::and_then::AndThen<reqwest::async_impl::client::Pending, std::result::Result<reqwest::async_impl::response::Response, reqwest::error::Error>, [closure@src/cratesio/mod.rs:76:23: 76:53]>, reqwest::async_impl::response::Json<cratesio::Summary>, [closure@src/cratesio/mod.rs:77:23: 77:45]>, [closure@src/cratesio/mod.rs:78:18: 83:14 get_crates:[closure@src/cratesio/mod.rs:40:75: 42:18]]>`
  = note: required because it appears within the type `futures::future::either::Either<futures::future::map::Map<futures::future::and_then::AndThen<futures::future::and_then::AndThen<reqwest::async_impl::client::Pending, std::result::Result<reqwest::async_impl::response::Response, reqwest::error::Error>, [closure@src/cratesio/mod.rs:76:23: 76:53]>, reqwest::async_impl::response::Json<cratesio::Summary>, [closure@src/cratesio/mod.rs:77:23: 77:45]>, [closure@src/cratesio/mod.rs:78:18: 83:14 get_crates:[closure@src/cratesio/mod.rs:40:75: 42:18]]>, futures::future::map::Map<futures::future::and_then::AndThen<futures::future::and_then::AndThen<reqwest::async_impl::client::Pending, std::result::Result<reqwest::async_impl::response::Response, reqwest::error::Error>, [closure@src/cratesio/mod.rs:76:23: 76:53]>, reqwest::async_impl::response::Json<cratesio::Crates>, [closure@src/cratesio/mod.rs:77:23: 77:45]>, [closure@src/cratesio/mod.rs:78:18: 83:14 get_crates:[closure@src/cratesio/mod.rs:50:50: 50:76]]>>`
  = note: required because it appears within the type `futures::future::map_err::MapErr<futures::future::either::Either<futures::future::map::Map<futures::future::and_then::AndThen<futures::future::and_then::AndThen<reqwest::async_impl::client::Pending, std::result::Result<reqwest::async_impl::response::Response, reqwest::error::Error>, [closure@src/cratesio/mod.rs:76:23: 76:53]>, reqwest::async_impl::response::Json<cratesio::Summary>, [closure@src/cratesio/mod.rs:77:23: 77:45]>, [closure@src/cratesio/mod.rs:78:18: 83:14 get_crates:[closure@src/cratesio/mod.rs:40:75: 42:18]]>, futures::future::map::Map<futures::future::and_then::AndThen<futures::future::and_then::AndThen<reqwest::async_impl::client::Pending, std::result::Result<reqwest::async_impl::response::Response, reqwest::error::Error>, [closure@src/cratesio/mod.rs:76:23: 76:53]>, reqwest::async_impl::response::Json<cratesio::Crates>, [closure@src/cratesio/mod.rs:77:23: 77:45]>, [closure@src/cratesio/mod.rs:78:18: 83:14 get_crates:[closure@src/cratesio/mod.rs:50:50: 50:76]]>>, [closure@src/cratesio/mod.rs:54:22: 54:65]>`
  = note: required because it appears within the type `futures::future::chain::Chain<futures::future::map_err::MapErr<futures::future::either::Either<futures::future::map::Map<futures::future::and_then::AndThen<futures::future::and_then::AndThen<reqwest::async_impl::client::Pending, std::result::Result<reqwest::async_impl::response::Response, reqwest::error::Error>, [closure@src/cratesio/mod.rs:76:23: 76:53]>, reqwest::async_impl::response::Json<cratesio::Summary>, [closure@src/cratesio/mod.rs:77:23: 77:45]>, [closure@src/cratesio/mod.rs:78:18: 83:14 get_crates:[closure@src/cratesio/mod.rs:40:75: 42:18]]>, futures::future::map::Map<futures::future::and_then::AndThen<futures::future::and_then::AndThen<reqwest::async_impl::client::Pending, std::result::Result<reqwest::async_impl::response::Response, reqwest::error::Error>, [closure@src/cratesio/mod.rs:76:23: 76:53]>, reqwest::async_impl::response::Json<cratesio::Crates>, [closure@src/cratesio/mod.rs:77:23: 77:45]>, [closure@src/cratesio/mod.rs:78:18: 83:14 get_crates:[closure@src/cratesio/mod.rs:50:50: 50:76]]>>, [closure@src/cratesio/mod.rs:54:22: 54:65]>, futures::future::map_err::MapErr<futures::future::map::Map<futures::future::either::Either<futures::future::and_then::AndThen<futures::future::map_err::MapErr<futures::future::and_then::AndThen<reqwest::async_impl::client::Pending, reqwest::async_impl::response::Json<telegram_types::bot::methods::TelegramResult<bool>>, [closure@src/bot.rs:143:23: 143:45]>, fn(reqwest::error::Error) -> bot::Error {<bot::Error as std::convert::From<reqwest::error::Error>>::from}>, std::result::Result<bool, bot::Error>, [closure@src/bot.rs:145:23: 145:90]>, futures::future::result_::FutureResult<bool, bot::Error>>, [closure@src/cratesio/mod.rs:59:26: 59:32]>, [closure@src/cratesio/mod.rs:60:30: 60:74]>, [closure@src/cratesio/mod.rs:55:23: 61:14 bot:bot::Bot, query:telegram_types::bot::inline_mode::InlineQuery]>`
  = note: required because it appears within the type `futures::future::and_then::AndThen<futures::future::map_err::MapErr<futures::future::either::Either<futures::future::map::Map<futures::future::and_then::AndThen<futures::future::and_then::AndThen<reqwest::async_impl::client::Pending, std::result::Result<reqwest::async_impl::response::Response, reqwest::error::Error>, [closure@src/cratesio/mod.rs:76:23: 76:53]>, reqwest::async_impl::response::Json<cratesio::Summary>, [closure@src/cratesio/mod.rs:77:23: 77:45]>, [closure@src/cratesio/mod.rs:78:18: 83:14 get_crates:[closure@src/cratesio/mod.rs:40:75: 42:18]]>, futures::future::map::Map<futures::future::and_then::AndThen<futures::future::and_then::AndThen<reqwest::async_impl::client::Pending, std::result::Result<reqwest::async_impl::response::Response, reqwest::error::Error>, [closure@src/cratesio/mod.rs:76:23: 76:53]>, reqwest::async_impl::response::Json<cratesio::Crates>, [closure@src/cratesio/mod.rs:77:23: 77:45]>, [closure@src/cratesio/mod.rs:78:18: 83:14 get_crates:[closure@src/cratesio/mod.rs:50:50: 50:76]]>>, [closure@src/cratesio/mod.rs:54:22: 54:65]>, futures::future::map_err::MapErr<futures::future::map::Map<futures::future::either::Either<futures::future::and_then::AndThen<futures::future::map_err::MapErr<futures::future::and_then::AndThen<reqwest::async_impl::client::Pending, reqwest::async_impl::response::Json<telegram_types::bot::methods::TelegramResult<bool>>, [closure@src/bot.rs:143:23: 143:45]>, fn(reqwest::error::Error) -> bot::Error {<bot::Error as std::convert::From<reqwest::error::Error>>::from}>, std::result::Result<bool, bot::Error>, [closure@src/bot.rs:145:23: 145:90]>, futures::future::result_::FutureResult<bool, bot::Error>>, [closure@src/cratesio/mod.rs:59:26: 59:32]>, [closure@src/cratesio/mod.rs:60:30: 60:74]>, [closure@src/cratesio/mod.rs:55:23: 61:14 bot:bot::Bot, query:telegram_types::bot::inline_mode::InlineQuery]>`
  = note: required because it appears within the type `futures::future::either::Either<futures::future::result_::FutureResult<(), ()>, futures::future::and_then::AndThen<futures::future::map_err::MapErr<futures::future::either::Either<futures::future::map::Map<futures::future::and_then::AndThen<futures::future::and_then::AndThen<reqwest::async_impl::client::Pending, std::result::Result<reqwest::async_impl::response::Response, reqwest::error::Error>, [closure@src/cratesio/mod.rs:76:23: 76:53]>, reqwest::async_impl::response::Json<cratesio::Summary>, [closure@src/cratesio/mod.rs:77:23: 77:45]>, [closure@src/cratesio/mod.rs:78:18: 83:14 get_crates:[closure@src/cratesio/mod.rs:40:75: 42:18]]>, futures::future::map::Map<futures::future::and_then::AndThen<futures::future::and_then::AndThen<reqwest::async_impl::client::Pending, std::result::Result<reqwest::async_impl::response::Response, reqwest::error::Error>, [closure@src/cratesio/mod.rs:76:23: 76:53]>, reqwest::async_impl::response::Json<cratesio::Crates>, [closure@src/cratesio/mod.rs:77:23: 77:45]>, [closure@src/cratesio/mod.rs:78:18: 83:14 get_crates:[closure@src/cratesio/mod.rs:50:50: 50:76]]>>, [closure@src/cratesio/mod.rs:54:22: 54:65]>, futures::future::map_err::MapErr<futures::future::map::Map<futures::future::either::Either<futures::future::and_then::AndThen<futures::future::map_err::MapErr<futures::future::and_then::AndThen<reqwest::async_impl::client::Pending, reqwest::async_impl::response::Json<telegram_types::bot::methods::TelegramResult<bool>>, [closure@src/bot.rs:143:23: 143:45]>, fn(reqwest::error::Error) -> bot::Error {<bot::Error as std::convert::From<reqwest::error::Error>>::from}>, std::result::Result<bool, bot::Error>, [closure@src/bot.rs:145:23: 145:90]>, futures::future::result_::FutureResult<bool, bot::Error>>, [closure@src/cratesio/mod.rs:59:26: 59:32]>, [closure@src/cratesio/mod.rs:60:30: 60:74]>, [closure@src/cratesio/mod.rs:55:23: 61:14 bot:bot::Bot, query:telegram_types::bot::inline_mode::InlineQuery]>>`
  = note: required because of the requirements on the impl of `bot_runner::UpdateHandler` for `bot_runner::BotRun<cratesio::CratesioBot, for<'r> fn(&'r cratesio::CratesioBot, telegram_types::bot::types::Update) -> impl futures::future::Future {cratesio::CratesioBot::handle_update}>`
  = note: required because of the requirements on the impl of `futures::future::Future` for `bot_runner::BotRun<cratesio::CratesioBot, for<'r> fn(&'r cratesio::CratesioBot, telegram_types::bot::types::Update) -> impl futures::future::Future {cratesio::CratesioBot::handle_update}>`
  = note: required because of the requirements on the impl of `futures::future::IntoFuture` for `bot_runner::BotRun<cratesio::CratesioBot, for<'r> fn(&'r cratesio::CratesioBot, telegram_types::bot::types::Update) -> impl futures::future::Future {cratesio::CratesioBot::handle_update}>`

(Note: this projects always rebuild because its build script uses git-version which tricks cargo to rebuild even when nothing changes.)

Further note: if I remove the incremental directory in target, then it builds again. But after that, it fails again.

I have verified that it reproduces in both my macOS and a Linux VPS.

@upsuper
Copy link
Contributor Author

upsuper commented Dec 8, 2018

A largely simplified version: testcase.zip

I guess the incremental build somehow pushes some stuff closer to the limitation, and thus triggers this error while non-incremental build doesn't, since removing many of the steps would have the error resolved.

upsuper added a commit to upsuper/telegram-rustevalbot that referenced this issue Dec 9, 2018
@csmoe csmoe added the A-incr-comp Area: Incremental compilation label Dec 9, 2018
@jonas-schievink jonas-schievink added T-compiler Relevant to the compiler team, which will review and decide on the PR/issue. C-bug Category: This is a bug. labels Mar 29, 2019
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
A-incr-comp Area: Incremental compilation C-bug Category: This is a bug. T-compiler Relevant to the compiler team, which will review and decide on the PR/issue.
Projects
None yet
Development

No branches or pull requests

3 participants