Repository: rust
Issue: error[E0275]: overflow evaluating the requirement only with incremental build involved
Labels: T-compiler,A-incr-comp,C-bug

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:
<details>

```
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}>`
```

</details>

(Note: this projects always rebuild because its build script uses [git-version](https://crates.io/crates/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.