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

[WIP] Impl Debug, Hash, PartialEq, Eq, PartialOrd, Ord, Default for closures #62815

Draft
wants to merge 1 commit into
base: master
from

Conversation

@luca-barbieri
Copy link
Contributor

commented Jul 19, 2019

This pull request implements these traits for closures in addition to the Copy and Clone that the compiler already supports, as well as allowing crates to implement their custom traits for closures.

Motivation

As for motivation, there is the "serde_closure" crate that does this by re-implementing closures with a macro (except it can't automatically detect upvars), and in general Debug is useful for debugging, while the other traits are useful to determine whether instances of a closure are equal, which can allow to avoid re-calling the closure and instead using a memoized result (when the API requires the closure to be a pure function): this is useful for instance for React-like WebAssembly frameworks where a component may take as props closures that generate subcomponents and that should not be called again if props is set to props equal to the old props (which requires an impl of Eq for closures).

Implementation

This code uses a clever technique that allows to add this feature with minimal effort and maximal flexibility:

  1. Each closure now implements a Closure trait
  2. The Closure impl has an Inner associated type that consists of a tuple with the same layout of the closure (we use a tuple of the upvars followed by the new marker LayoutAs)
  3. We add blanket impls of Debug, Hash, PartialEq, Eq, PartialOrd, Ord, Default for T: Closure conditional on ::Inner implementing the traits (we special-case the Closure trait in coherence.rs to make this work).
  4. This results in the already existing implementations for tuples being reused for closures

The advantage of this strategy is that it does not require any code to generate implementations of specific
traits, and allows to implement custom traits on closures without changing the compiler.

Drawbacks

The first drawback is that we inherit the tuple length limit on the impls. However, that needs to be fixed for tuples anyway, and the fix will fix closures as well.

Another apparent drawback that should however not be an issue is that we expose closures as tuples, allowing code to know about the upvar types. Since we use a special layout marker that includes the closure type and that can't be instantiated otherwise, this does not limit the ability to do profile-guided layout or in general to change closure layout in an arbitrary way. Also, closures are semantically a tuple of their upvars so exposing this should not be a problem.

We also expose an ordering of the upvars. However, there is a canonical ordering, which is the order of the source code position of the first mention of the upvar, that I hope the compiler is currently using and if so there seems to be no reason to change it.

Alternatives

Adapting the #[derive] code is not easily possible because it's broken (generates incorrect type bounds) and because it's based on the AST, and in that phase we don't even know what the upvars are.

Generating MIR like for the Clone shim is possible, but it requires ad-hoc code and wouldn't allow to implement for instance the serde traits without adding even more ad-hoc code to the compiler; on the other hand, the approach in this pull request allows to reuse trait implementations for tuples.

Shortcomings

The current implementation seems to work but has:

  • No feature gating, immediately stable
  • No RFC
  • No tests

Conclusion

Let me know if this is considered a viable approach, and whether you would like a feature gate, RFC, or tests.

@rust-highfive

This comment has been minimized.

Copy link
Collaborator

commented Jul 19, 2019

Some changes occurred in diagnostic error codes

cc @GuillaumeGomez

@rust-highfive

This comment has been minimized.

Copy link
Collaborator

commented Jul 19, 2019

Thanks for the pull request, and welcome! The Rust team is excited to review your changes, and you should hear from @shepmaster (or someone else) soon.

If any changes to this PR are deemed necessary, please add them as extra commits. This ensures that the reviewer can see what has changed since they last reviewed the code. Due to the way GitHub handles out-of-date commits, this should also make it reasonably obvious what issues have or haven't been addressed. Large or tricky changes may require several passes of review and changes.

Please see the contribution instructions for more information.

@rust-highfive

This comment has been minimized.

Copy link
Collaborator

commented Jul 19, 2019

The job x86_64-gnu-llvm-6.0 of your PR failed (raw log). Through arcane magic we have determined that the following fragments from the build log may contain information about the problem.

Click to expand the log.
2019-07-19T23:17:42.2024623Z ##[command]git remote add origin https://github.com/rust-lang/rust
2019-07-19T23:17:42.2215085Z ##[command]git config gc.auto 0
2019-07-19T23:17:42.7956381Z ##[command]git config --get-all http.https://github.com/rust-lang/rust.extraheader
2019-07-19T23:17:42.7964769Z ##[command]git config --get-all http.proxy
2019-07-19T23:17:42.7970852Z ##[command]git -c http.extraheader="AUTHORIZATION: basic ***" fetch --force --tags --prune --progress --no-recurse-submodules --depth=2 origin +refs/heads/*:refs/remotes/origin/* +refs/pull/62815/merge:refs/remotes/pull/62815/merge
---
2019-07-19T23:18:16.4612444Z do so (now or later) by using -b with the checkout command again. Example:
2019-07-19T23:18:16.4612667Z 
2019-07-19T23:18:16.4613048Z   git checkout -b <new-branch-name>
2019-07-19T23:18:16.4613255Z 
2019-07-19T23:18:16.4613413Z HEAD is now at d329f8e8d Merge 517e4eae88d519363a7f24f8e4412ee771dc5dea into e3cebcb3bd4ffaf86bb0cdfd2af5b7e698717b01
2019-07-19T23:18:16.4679903Z ##[section]Starting: Collect CPU-usage statistics in the background
2019-07-19T23:18:16.4682703Z ==============================================================================
2019-07-19T23:18:16.4682762Z Task         : Bash
2019-07-19T23:18:16.4682810Z Description  : Run a Bash script on macOS, Linux, or Windows
---
2019-07-19T23:24:03.7699259Z    Compiling serde_json v1.0.40
2019-07-19T23:24:07.7236527Z    Compiling tidy v0.1.0 (/checkout/src/tools/tidy)
2019-07-19T23:24:15.6471360Z     Finished release [optimized] target(s) in 1m 24s
2019-07-19T23:24:15.6547003Z tidy check
2019-07-19T23:24:15.9994773Z tidy error: /checkout/src/librustc/traits/project.rs:1392: line longer than 100 chars
2019-07-19T23:24:15.9994940Z tidy error: /checkout/src/librustc/traits/project.rs:1393: line longer than 100 chars
2019-07-19T23:24:16.0020253Z tidy error: /checkout/src/librustc/traits/project.rs:1395: line longer than 100 chars
2019-07-19T23:24:16.0020326Z tidy error: /checkout/src/librustc/traits/project.rs:1396: line longer than 100 chars
2019-07-19T23:24:16.0020382Z tidy error: /checkout/src/librustc/traits/coherence.rs:195: line longer than 100 chars
2019-07-19T23:24:17.3191050Z some tidy checks failed
2019-07-19T23:24:17.3196581Z 
2019-07-19T23:24:17.3196581Z 
2019-07-19T23:24:17.3197561Z command did not execute successfully: "/checkout/obj/build/x86_64-unknown-linux-gnu/stage0-tools-bin/tidy" "/checkout/src" "/checkout/obj/build/x86_64-unknown-linux-gnu/stage0/bin/cargo" "--no-vendor"
2019-07-19T23:24:17.3198067Z 
2019-07-19T23:24:17.3198241Z 
2019-07-19T23:24:17.3202602Z failed to run: /checkout/obj/build/bootstrap/debug/bootstrap test src/tools/tidy
2019-07-19T23:24:17.3202972Z Build completed unsuccessfully in 0:01:26
2019-07-19T23:24:17.3202972Z Build completed unsuccessfully in 0:01:26
2019-07-19T23:24:18.5970641Z ##[error]Bash exited with code '1'.
2019-07-19T23:24:18.6001807Z ##[section]Starting: Checkout
2019-07-19T23:24:18.6003634Z ==============================================================================
2019-07-19T23:24:18.6003680Z Task         : Get sources
2019-07-19T23:24:18.6003739Z Description  : Get sources from a repository. Supports Git, TfsVC, and SVN repositories.

I'm a bot! I can only do what humans tell me to, so if this was not helpful or you have suggestions for improvements, please ping or otherwise contact @TimNN. (Feature Requests)

@luca-barbieri luca-barbieri force-pushed the luca-barbieri:closure_traits branch from 517e4ea to e2d5489 Jul 20, 2019

@rust-highfive

This comment has been minimized.

Copy link
Collaborator

commented Jul 20, 2019

The job x86_64-gnu-llvm-6.0 of your PR failed (raw log). Through arcane magic we have determined that the following fragments from the build log may contain information about the problem.

Click to expand the log.
2019-07-20T00:06:33.2710545Z ##[command]git remote add origin https://github.com/rust-lang/rust
2019-07-20T00:06:33.2984129Z ##[command]git config gc.auto 0
2019-07-20T00:06:33.3043989Z ##[command]git config --get-all http.https://github.com/rust-lang/rust.extraheader
2019-07-20T00:06:33.3086592Z ##[command]git config --get-all http.proxy
2019-07-20T00:06:33.3211094Z ##[command]git -c http.extraheader="AUTHORIZATION: basic ***" fetch --force --tags --prune --progress --no-recurse-submodules --depth=2 origin +refs/heads/*:refs/remotes/origin/* +refs/pull/62815/merge:refs/remotes/pull/62815/merge
---
2019-07-20T00:07:06.5012092Z do so (now or later) by using -b with the checkout command again. Example:
2019-07-20T00:07:06.5012326Z 
2019-07-20T00:07:06.5012671Z   git checkout -b <new-branch-name>
2019-07-20T00:07:06.5013416Z 
2019-07-20T00:07:06.5013737Z HEAD is now at 06bf69bc0 Merge e2d5489cb6c53b259e002a38dc4d87714e1bc243 into e3cebcb3bd4ffaf86bb0cdfd2af5b7e698717b01
2019-07-20T00:07:06.5142173Z ##[section]Starting: Collect CPU-usage statistics in the background
2019-07-20T00:07:06.5144969Z ==============================================================================
2019-07-20T00:07:06.5145050Z Task         : Bash
2019-07-20T00:07:06.5145097Z Description  : Run a Bash script on macOS, Linux, or Windows
---
2019-07-20T00:58:22.6820758Z .................................................................................................... 200/5835
2019-07-20T00:58:26.3438318Z .................................................................................................... 300/5835
2019-07-20T00:58:29.6095152Z .................................................................................................... 400/5835
2019-07-20T00:58:32.8606612Z .................................................................................................... 500/5835
2019-07-20T00:58:36.1959775Z ........................................................................i........................... 600/5835
2019-07-20T00:58:40.3690740Z .................................................................................................... 700/5835
2019-07-20T00:58:43.9613081Z ..........F................................F..F................F.................................... 800/5835
2019-07-20T00:58:53.1838984Z ...................................................................................................i 1000/5835
2019-07-20T00:58:53.1838984Z ...................................................................................................i 1000/5835
2019-07-20T00:58:58.0731126Z ...........i.........................................F.FFFFFFFFFFFFFFFFF....FFFF.................... 1100/5835
2019-07-20T00:59:01.5284259Z .............................iiiii.................................................................. 1200/5835
2019-07-20T00:59:06.8712562Z .................................................................................................... 1400/5835
2019-07-20T00:59:09.2370257Z .................................................................................................... 1500/5835
2019-07-20T00:59:12.5399981Z ........................................F........................................................... 1600/5835
2019-07-20T00:59:14.8110266Z .................................................................................................... 1700/5835
2019-07-20T00:59:14.8110266Z .................................................................................................... 1700/5835
2019-07-20T00:59:17.8843678Z ...................................................................i................................ 1800/5835
2019-07-20T00:59:25.4061455Z .................................................................................................... 2000/5835
2019-07-20T00:59:29.2306981Z .................................................................................................... 2100/5835
2019-07-20T00:59:32.5273093Z .................................................................................................... 2200/5835
2019-07-20T00:59:32.5273093Z .................................................................................................... 2200/5835
2019-07-20T00:59:35.8587513Z ..................................................i................................................. 2300/5835
2019-07-20T00:59:39.8891373Z ........................................................................F........................... 2400/5835
2019-07-20T00:59:44.3855243Z .........F.......................................................................................... 2500/5835
2019-07-20T00:59:52.4779626Z .................................................................................................... 2700/5835
2019-07-20T00:59:55.9597412Z .........................................F.......................................................... 2800/5835
2019-07-20T00:59:59.7718827Z .................................................................................................... 2900/5835
2019-07-20T01:00:04.3700276Z .................................................................................................... 3000/5835
2019-07-20T01:00:04.3700276Z .................................................................................................... 3000/5835
2019-07-20T01:00:08.2517608Z .................................................................................................... 3100/5835
2019-07-20T01:00:12.8670116Z .........................................................................F.......................... 3200/5835
2019-07-20T01:00:15.8788594Z .................................................................................................... 3300/5835
2019-07-20T01:00:19.2888193Z .................................................................................................... 3400/5835
2019-07-20T01:00:23.8150820Z .................................................................................................... 3500/5835
2019-07-20T01:00:28.0230694Z ............i....................................................................................... 3600/5835
2019-07-20T01:00:30.8353094Z .................................................F....................................ii...i..ii.... 3700/5835
2019-07-20T01:00:38.8884427Z .................................................................................................... 3900/5835
2019-07-20T01:00:42.5664166Z .................................................................................................... 4000/5835
2019-07-20T01:00:42.5664166Z .................................................................................................... 4000/5835
2019-07-20T01:00:45.9562751Z ii...................................................F.............................................. 4100/5835
2019-07-20T01:00:47.8264824Z .....................i.............................................................................. 4200/5835
2019-07-20T01:00:49.6024964Z ...........................................................F...........................i............ 4300/5835
2019-07-20T01:00:57.2571701Z ...F................................................................................................ 4500/5835
2019-07-20T01:01:12.0778829Z ..........................................................................................F......... 4600/5835
2019-07-20T01:01:16.0333523Z .................................................................................................... 4700/5835
2019-07-20T01:01:18.4656670Z .................................................................................................... 4800/5835
---
2019-07-20T01:01:43.4146991Z .................................................................................................... 5300/5835
2019-07-20T01:01:47.9653640Z .................................................................................................... 5400/5835
2019-07-20T01:01:51.4249529Z .................................................................................................... 5500/5835
2019-07-20T01:01:55.0665859Z .................................................................................................... 5600/5835
2019-07-20T01:01:57.9224600Z ............................F....................................................................... 5700/5835
2019-07-20T01:02:00.4696598Z ...........................................................................i........................ 5800/5835
2019-07-20T01:02:01.6822885Z ........FFFFFF....FF...............
2019-07-20T01:02:01.6864021Z 
2019-07-20T01:02:01.6864695Z ---- [ui] ui/associated-type-bounds/bad-bounds-on-assoc-in-trait.rs stdout ----
2019-07-20T01:02:01.6864935Z diff of stderr:
2019-07-20T01:02:01.6865211Z 
2019-07-20T01:02:01.6865211Z 
2019-07-20T01:02:01.6865676Z - error[E0277]: `<L1 as Lam<&'a u8>>::App` doesn't implement `std::fmt::Debug`
2019-07-20T01:02:01.6865864Z + error[E0277]: the trait bound `u8: core::closure::Closure` is not satisfied
2019-07-20T01:02:01.6866399Z 3    |
2019-07-20T01:02:01.6866399Z 3    |
2019-07-20T01:02:01.6866542Z 4 LL | impl Case1 for S1 {
2019-07-20T01:02:01.6866649Z 
2019-07-20T01:02:01.6867000Z -    |      ^^^^^ `<L1 as Lam<&'a u8>>::App` cannot be formatted using `{:?}` because it doesn't implement `std::fmt::Debug`
2019-07-20T01:02:01.6867177Z +    |      ^^^^^ the trait `core::closure::Closure` is not implemented for `u8`
2019-07-20T01:02:01.6867340Z 6    |
2019-07-20T01:02:01.6867688Z -    = help: the trait `for<'a> std::fmt::Debug` is not implemented for `<L1 as Lam<&'a u8>>::App`
2019-07-20T01:02:01.6868080Z +    = note: required because of the requirements on the impl of `for<'a> std::fmt::Debug` for `<L1 as Lam<&'a u8>>::App`
2019-07-20T01:02:01.6868291Z 8 
2019-07-20T01:02:01.6868440Z 9 error[E0277]: `<<T as Case1>::C as std::iter::Iterator>::Item` is not an iterator
2019-07-20T01:02:01.6868889Z 
2019-07-20T01:02:01.6868889Z 
2019-07-20T01:02:01.6869009Z 61 LL | trait Case1 {
2019-07-20T01:02:01.6869782Z 63 
2019-07-20T01:02:01.6869782Z 63 
2019-07-20T01:02:01.6870258Z - error[E0277]: `<_ as Lam<&'a u8>>::App` doesn't implement `std::fmt::Debug`
2019-07-20T01:02:01.6871086Z -    |
2019-07-20T01:02:01.6871086Z -    |
2019-07-20T01:02:01.6871475Z - LL | / fn assume_case1<T: Case1>() {
2019-07-20T01:02:01.6871850Z - LL | |
2019-07-20T01:02:01.6872255Z - LL | |
2019-07-20T01:02:01.6872621Z - LL | |
2019-07-20T01:02:01.6873284Z - ...  |
2019-07-20T01:02:01.6873610Z - LL | |     assert_c::<_, _, _, T::C>();
2019-07-20T01:02:01.6873910Z - LL | | }
2019-07-20T01:02:01.6874324Z -    | |_^ `<_ as Lam<&'a u8>>::App` cannot be formatted using `{:?}` because it doesn't implement `std::fmt::Debug`
2019-07-20T01:02:01.6874673Z -    |
2019-07-20T01:02:01.6875041Z -    = help: the trait `for<'a> std::fmt::Debug` is not implemented for `<_ as Lam<&'a u8>>::App`
2019-07-20T01:02:01.6875367Z - note: required by `Case1`
2019-07-20T01:02:01.6876017Z -    |
2019-07-20T01:02:01.6876017Z -    |
2019-07-20T01:02:01.6876355Z - LL | trait Case1 {
2019-07-20T01:02:01.6876937Z - 
2019-07-20T01:02:01.6877261Z - error: aborting due to 5 previous errors
2019-07-20T01:02:01.6877421Z + error: aborting due to 4 previous errors
2019-07-20T01:02:01.6877561Z 84 
2019-07-20T01:02:01.6877561Z 84 
2019-07-20T01:02:01.6877894Z 85 For more information about this error, try `rustc --explain E0277`.
2019-07-20T01:02:01.6878052Z 86 
2019-07-20T01:02:01.6878154Z 
2019-07-20T01:02:01.6878255Z 
2019-07-20T01:02:01.6878394Z The actual stderr differed from the expected stderr.
2019-07-20T01:02:01.6879592Z Actual stderr saved to /checkout/obj/build/x86_64-unknown-linux-gnu/test/ui/associated-type-bounds/bad-bounds-on-assoc-in-trait/bad-bounds-on-assoc-in-trait.stderr
2019-07-20T01:02:01.6880513Z To update references, rerun the tests and pass the `--bless` flag
2019-07-20T01:02:01.6881120Z To only update this specific test, also pass `--test-args associated-type-bounds/bad-bounds-on-assoc-in-trait.rs`
2019-07-20T01:02:01.6881527Z error: 1 errors occurred comparing output.
2019-07-20T01:02:01.6881695Z status: exit code: 1
2019-07-20T01:02:01.6881695Z status: exit code: 1
2019-07-20T01:02:01.6883024Z command: "/checkout/obj/build/x86_64-unknown-linux-gnu/stage2/bin/rustc" "/checkout/src/test/ui/associated-type-bounds/bad-bounds-on-assoc-in-trait.rs" "-Zthreads=1" "--target=x86_64-unknown-linux-gnu" "--error-format" "json" "-Zui-testing" "-C" "prefer-dynamic" "--out-dir" "/checkout/obj/build/x86_64-unknown-linux-gnu/test/ui/associated-type-bounds/bad-bounds-on-assoc-in-trait" "-Crpath" "-O" "-Cdebuginfo=0" "-Zunstable-options" "-Lnative=/checkout/obj/build/x86_64-unknown-linux-gnu/native/rust-test-helpers" "-L" "/checkout/obj/build/x86_64-unknown-linux-gnu/test/ui/associated-type-bounds/bad-bounds-on-assoc-in-trait/auxiliary" "-A" "unused"
2019-07-20T01:02:01.6883623Z ------------------------------------------
2019-07-20T01:02:01.6883760Z 
2019-07-20T01:02:01.6884030Z ------------------------------------------
2019-07-20T01:02:01.6884195Z stderr:
2019-07-20T01:02:01.6884195Z stderr:
2019-07-20T01:02:01.6884466Z ------------------------------------------
2019-07-20T01:02:01.6884618Z error[E0277]: the trait bound `u8: core::closure::Closure` is not satisfied
2019-07-20T01:02:01.6885101Z    |
2019-07-20T01:02:01.6885101Z    |
2019-07-20T01:02:01.6885218Z LL | impl Case1 for S1 {
2019-07-20T01:02:01.6885360Z    |      ^^^^^ the trait `core::closure::Closure` is not implemented for `u8`
2019-07-20T01:02:01.6885480Z    |
2019-07-20T01:02:01.6885844Z    = note: required because of the requirements on the impl of `for<'a> std::fmt::Debug` for `<L1 as Lam<&'a u8>>::App`
2019-07-20T01:02:01.6885997Z 
2019-07-20T01:02:01.6886139Z error[E0277]: `<<T as Case1>::C as std::iter::Iterator>::Item` is not an iterator
2019-07-20T01:02:01.6886629Z    |
2019-07-20T01:02:01.6886629Z    |
2019-07-20T01:02:01.6886748Z LL | / fn assume_case1<T: Case1>() {
2019-07-20T01:02:01.6887061Z LL | | //~^ ERROR `<_ as Lam<&'a u8>>::App` doesn't implement `std::fmt::Debug` [E0277]
2019-07-20T01:02:01.6887262Z LL | | //~| ERROR `<<T as Case1>::C as std::iter::Iterator>::Item` is not an iterator [E0277]
2019-07-20T01:02:01.6887392Z LL | | //~| ERROR `<<T as Case1>::C as std::iter::Iterator>::Item` cannot be sent between threads safely [E0277]
2019-07-20T01:02:01.6887509Z ...  |
2019-07-20T01:02:01.6887641Z LL | |     assert_c::<_, _, _, T::C>();
2019-07-20T01:02:01.6887754Z LL | | }
2019-07-20T01:02:01.6887890Z    | |_^ `<<T as Case1>::C as std::iter::Iterator>::Item` is not an iterator
2019-07-20T01:02:01.6888004Z    |
2019-07-20T01:02:01.6888215Z    = help: the trait `std::iter::Iterator` is not implemented for `<<T as Case1>::C as std::iter::Iterator>::Item`
2019-07-20T01:02:01.6888354Z    = help: consider adding a `where <<T as Case1>::C as std::iter::Iterator>::Item: std::iter::Iterator` bound
2019-07-20T01:02:01.6888478Z 
2019-07-20T01:02:01.6888599Z error[E0277]: `<<T as Case1>::C as std::iter::Iterator>::Item` cannot be sent between threads safely
2019-07-20T01:02:01.6892023Z    |
2019-07-20T01:02:01.6892023Z    |
2019-07-20T01:02:01.6892300Z LL | / fn assume_case1<T: Case1>() {
2019-07-20T01:02:01.6896892Z LL | | //~^ ERROR `<_ as Lam<&'a u8>>::App` doesn't implement `std::fmt::Debug` [E0277]
2019-07-20T01:02:01.6897206Z LL | | //~| ERROR `<<T as Case1>::C as std::iter::Iterator>::Item` is not an iterator [E0277]
2019-07-20T01:02:01.6897920Z LL | | //~| ERROR `<<T as Case1>::C as std::iter::Iterator>::Item` cannot be sent between threads safely [E0277]
2019-07-20T01:02:01.6898055Z ...  |
2019-07-20T01:02:01.6898193Z LL | |     assert_c::<_, _, _, T::C>();
2019-07-20T01:02:01.6898468Z LL | | }
2019-07-20T01:02:01.6898585Z    | |_^ `<<T as Case1>::C as std::iter::Iterator>::Item` cannot be sent between threads safely
2019-07-20T01:02:01.6898715Z    |
2019-07-20T01:02:01.6898836Z    = help: the trait `std::marker::Send` is not implemented for `<<T as Case1>::C as std::iter::Iterator>::Item`
2019-07-20T01:02:01.6898989Z    = help: consider adding a `where <<T as Case1>::C as std::iter::Iterator>::Item: std::marker::Send` bound
2019-07-20T01:02:01.6899409Z note: required by `Case1`
2019-07-20T01:02:01.6900170Z    |
2019-07-20T01:02:01.6900170Z    |
2019-07-20T01:02:01.6900325Z LL | trait Case1 {
2019-07-20T01:02:01.6900622Z 
2019-07-20T01:02:01.6900622Z 
2019-07-20T01:02:01.6900919Z error[E0277]: `<<T as Case1>::C as std::iter::Iterator>::Item` cannot be shared between threads safely
2019-07-20T01:02:01.6901631Z    |
2019-07-20T01:02:01.6901631Z    |
2019-07-20T01:02:01.6901785Z LL | / fn assume_case1<T: Case1>() {
2019-07-20T01:02:01.6902197Z LL | | //~^ ERROR `<_ as Lam<&'a u8>>::App` doesn't implement `std::fmt::Debug` [E0277]
2019-07-20T01:02:01.6902422Z LL | | //~| ERROR `<<T as Case1>::C as std::iter::Iterator>::Item` is not an iterator [E0277]
2019-07-20T01:02:01.6902595Z LL | | //~| ERROR `<<T as Case1>::C as std::iter::Iterator>::Item` cannot be sent between threads safely [E0277]
2019-07-20T01:02:01.6902903Z ...  |
2019-07-20T01:02:01.6903225Z LL | |     assert_c::<_, _, _, T::C>();
2019-07-20T01:02:01.6903521Z LL | | }
2019-07-20T01:02:01.6903637Z    | |_^ `<<T as Case1>::C as std::iter::Iterator>::Item` cannot be shared between threads safely
2019-07-20T01:02:01.6903762Z    |
2019-07-20T01:02:01.6903908Z    = help: the trait `std::marker::Sync` is not implemented for `<<T as Case1>::C as std::iter::Iterator>::Item`
2019-07-20T01:02:01.6904035Z    = help: consider adding a `where <<T as Case1>::C as std::iter::Iterator>::Item: std::marker::Sync` bound
2019-07-20T01:02:01.6904151Z note: required by `Case1`
2019-07-20T01:02:01.6904654Z    |
2019-07-20T01:02:01.6904654Z    |
2019-07-20T01:02:01.6904769Z LL | trait Case1 {
2019-07-20T01:02:01.6904974Z 
2019-07-20T01:02:01.6905126Z error: aborting due to 4 previous errors
2019-07-20T01:02:01.6905227Z 
2019-07-20T01:02:01.6905524Z For more information about this error, try `rustc --explain E0277`.
2019-07-20T01:02:01.6905524Z For more information about this error, try `rustc --explain E0277`.
2019-07-20T01:02:01.6905664Z 
2019-07-20T01:02:01.6905950Z ------------------------------------------
2019-07-20T01:02:01.6906106Z 
2019-07-20T01:02:01.6906207Z 
2019-07-20T01:02:01.6906570Z ---- [ui] ui/compare-method/traits-misc-mismatch-1.rs stdout ----
2019-07-20T01:02:01.6906728Z diff of stderr:
2019-07-20T01:02:01.6906829Z 
2019-07-20T01:02:01.6907127Z - error[E0276]: impl has stricter requirements than trait
2019-07-20T01:02:01.6907308Z + error[E0277]: the trait bound `T: core::closure::Closure` is not satisfied
2019-07-20T01:02:01.6907596Z 2   --> $DIR/traits-misc-mismatch-1.rs:27:5
2019-07-20T01:02:01.6907769Z 3    |
2019-07-20T01:02:01.6908050Z - LL |     fn test_error1_fn<T: Eq>(&self);
2019-07-20T01:02:01.6908402Z -    |     -------------------------------- definition of `test_error1_fn` from trait
2019-07-20T01:02:01.6908692Z - ...
2019-07-20T01:02:01.6908864Z 7 LL |     fn test_error1_fn<T: Ord>(&self) {}
2019-07-20T01:02:01.6909515Z -    |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ impl has extra requirement `T: std::cmp::Ord`
2019-07-20T01:02:01.6909739Z +    |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ the trait `core::closure::Closure` is not implemented for `T`
2019-07-20T01:02:01.6910038Z +    |
2019-07-20T01:02:01.6910229Z +    = help: consider adding a `where T: core::closure::Closure` bound
2019-07-20T01:02:01.6910395Z +    = note: required because of the requirements on the impl of `std::cmp::Ord` for `T`
2019-07-20T01:02:01.6910571Z +    = note: the requirement `T: std::cmp::Ord` appears on the impl method but not on the corresponding trait method
2019-07-20T01:02:01.6910891Z 10 error[E0276]: impl has stricter requirements than trait
2019-07-20T01:02:01.6911357Z 11   --> $DIR/traits-misc-mismatch-1.rs:31:5
2019-07-20T01:02:01.6911547Z 
2019-07-20T01:02:01.6911547Z 
2019-07-20T01:02:01.6911704Z 34 LL |     fn test_error5_fn<T: B>(&self) {}
2019-07-20T01:02:01.6911863Z 35    |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ impl has extra requirement `T: B`
2019-07-20T01:02:01.6912039Z 36 
2019-07-20T01:02:01.6912428Z - error[E0276]: impl has stricter requirements than trait
2019-07-20T01:02:01.6912956Z + error[E0277]: the trait bound `T: core::closure::Closure` is not satisfied
2019-07-20T01:02:01.6913370Z 38   --> $DIR/traits-misc-mismatch-1.rs:51:5
2019-07-20T01:02:01.6913553Z 39    |
2019-07-20T01:02:01.6921795Z - LL |     fn test_error7_fn<T: A>(&self);
2019-07-20T01:02:01.6922421Z -    |     ------------------------------- definition of `test_error7_fn` from trait
2019-07-20T01:02:01.6922946Z - ...
2019-07-20T01:02:01.6923132Z 43 LL |     fn test_error7_fn<T: A + Eq>(&self) {}
2019-07-20T01:02:01.6923454Z -    |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ impl has extra requirement `T: std::cmp::Eq`
2019-07-20T01:02:01.6923749Z +    |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ the trait `core::closure::Closure` is not implemented for `T`
2019-07-20T01:02:01.6923888Z +    |
2019-07-20T01:02:01.6924007Z +    = help: consider adding a `where T: core::closure::Closure` bound
2019-07-20T01:02:01.6924130Z +    = note: required because of the requirements on the impl of `std::cmp::Eq` for `T`
2019-07-20T01:02:01.6924299Z +    = note: the requirement `T: std::cmp::Eq` appears on the impl method but not on the corresponding trait method
2019-07-20T01:02:01.6924600Z 46 error[E0276]: impl has stricter requirements than trait
2019-07-20T01:02:01.6924910Z 47   --> $DIR/traits-misc-mismatch-1.rs:54:5
2019-07-20T01:02:01.6925075Z 
2019-07-20T01:02:01.6925261Z 63 
---
2019-07-20T01:02:01.6926930Z 67 
2019-07-20T01:02:01.6927098Z 
2019-07-20T01:02:01.6927232Z 
2019-07-20T01:02:01.6928015Z The actual stderr differed from the expected stderr.
2019-07-20T01:02:01.6928549Z Actual stderr saved to /checkout/obj/build/x86_64-unknown-linux-gnu/test/ui/compare-method/traits-misc-mismatch-1/traits-misc-mismatch-1.stderr
2019-07-20T01:02:01.6929073Z To update references, rerun the tests and pass the `--bless` flag
2019-07-20T01:02:01.6935668Z To only update this specific test, also pass `--test-args compare-method/traits-misc-mismatch-1.rs`
2019-07-20T01:02:01.6935765Z error: 1 errors occurred comparing output.
2019-07-20T01:02:01.6935804Z status: exit code: 1
2019-07-20T01:02:01.6935804Z status: exit code: 1
2019-07-20T01:02:01.6936461Z command: "/checkout/obj/build/x86_64-unknown-linux-gnu/stage2/bin/rustc" "/checkout/src/test/ui/compare-method/traits-misc-mismatch-1.rs" "-Zthreads=1" "--target=x86_64-unknown-linux-gnu" "--error-format" "json" "-Zui-testing" "-C" "prefer-dynamic" "--out-dir" "/checkout/obj/build/x86_64-unknown-linux-gnu/test/ui/compare-method/traits-misc-mismatch-1" "-Crpath" "-O" "-Cdebuginfo=0" "-Zunstable-options" "-Lnative=/checkout/obj/build/x86_64-unknown-linux-gnu/native/rust-test-helpers" "-L" "/checkout/obj/build/x86_64-unknown-linux-gnu/test/ui/compare-method/traits-misc-mismatch-1/auxiliary" "-A" "unused"
2019-07-20T01:02:01.6936965Z ------------------------------------------
2019-07-20T01:02:01.6936997Z 
2019-07-20T01:02:01.6937179Z ------------------------------------------
2019-07-20T01:02:01.6937236Z stderr:
2019-07-20T01:02:01.6937236Z stderr:
2019-07-20T01:02:01.6937411Z ------------------------------------------
2019-07-20T01:02:01.6937456Z error[E0277]: the trait bound `T: core::closure::Closure` is not satisfied
2019-07-20T01:02:01.7000118Z   --> /checkout/src/test/ui/compare-method/traits-misc-mismatch-1.rs:27:5
2019-07-20T01:02:01.7000238Z    |
2019-07-20T01:02:01.7000289Z LL |     fn test_error1_fn<T: Ord>(&self) {}
2019-07-20T01:02:01.7000378Z    |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ the trait `core::closure::Closure` is not implemented for `T`
2019-07-20T01:02:01.7000431Z    |
2019-07-20T01:02:01.7000483Z    = help: consider adding a `where T: core::closure::Closure` bound
2019-07-20T01:02:01.7000563Z    = note: required because of the requirements on the impl of `std::cmp::Ord` for `T`
2019-07-20T01:02:01.7000810Z    = note: the requirement `T: std::cmp::Ord` appears on the impl method but not on the corresponding trait method
2019-07-20T01:02:01.7000938Z error[E0276]: impl has stricter requirements than trait
2019-07-20T01:02:01.7001425Z   --> /checkout/src/test/ui/compare-method/traits-misc-mismatch-1.rs:31:5
2019-07-20T01:02:01.7001483Z    |
2019-07-20T01:02:01.7001483Z    |
2019-07-20T01:02:01.7001553Z LL |     fn test_error2_fn<T: Eq + Ord>(&self);
2019-07-20T01:02:01.7001866Z    |     -------------------------------------- definition of `test_error2_fn` from trait
2019-07-20T01:02:01.7001921Z ...
2019-07-20T01:02:01.7001993Z LL |     fn test_error2_fn<T: Eq + B>(&self) {}
2019-07-20T01:02:01.7002050Z    |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ impl has extra requirement `T: B`
2019-07-20T01:02:01.7002135Z error[E0276]: impl has stricter requirements than trait
2019-07-20T01:02:01.7002436Z   --> /checkout/src/test/ui/compare-method/traits-misc-mismatch-1.rs:35:5
2019-07-20T01:02:01.7002504Z    |
2019-07-20T01:02:01.7002504Z    |
2019-07-20T01:02:01.7002723Z LL |     fn test_error3_fn<T: Eq + Ord>(&self);
2019-07-20T01:02:01.7003321Z    |     -------------------------------------- definition of `test_error3_fn` from trait
2019-07-20T01:02:01.7003364Z ...
2019-07-20T01:02:01.7003401Z LL |     fn test_error3_fn<T: B + Eq>(&self) {}
2019-07-20T01:02:01.7003462Z    |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ impl has extra requirement `T: B`
2019-07-20T01:02:01.7003527Z error[E0276]: impl has stricter requirements than trait
2019-07-20T01:02:01.7003911Z   --> /checkout/src/test/ui/compare-method/traits-misc-mismatch-1.rs:45:5
2019-07-20T01:02:01.7003974Z    |
2019-07-20T01:02:01.7003974Z    |
2019-07-20T01:02:01.7004012Z LL |     fn test_error5_fn<T: A>(&self);
2019-07-20T01:02:01.7004232Z    |     ------------------------------- definition of `test_error5_fn` from trait
2019-07-20T01:02:01.7004290Z ...
2019-07-20T01:02:01.7004328Z LL |     fn test_error5_fn<T: B>(&self) {}
2019-07-20T01:02:01.7004378Z    |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ impl has extra requirement `T: B`
2019-07-20T01:02:01.7004415Z 
2019-07-20T01:02:01.7004477Z error[E0277]: the trait bound `T: core::closure::Closure` is not satisfied
2019-07-20T01:02:01.7004694Z   --> /checkout/src/test/ui/compare-method/traits-misc-mismatch-1.rs:51:5
2019-07-20T01:02:01.7004736Z    |
2019-07-20T01:02:01.7004794Z LL |     fn test_error7_fn<T: A + Eq>(&self) {}
2019-07-20T01:02:01.7004839Z    |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ the trait `core::closure::Closure` is not implemented for `T`
2019-07-20T01:02:01.7004879Z    |
2019-07-20T01:02:01.7004936Z    = help: consider adding a `where T: core::closure::Closure` bound
2019-07-20T01:02:01.7004982Z    = note: required because of the requirements on the impl of `std::cmp::Eq` for `T`
2019-07-20T01:02:01.7005031Z    = note: the requirement `T: std::cmp::Eq` appears on the impl method but not on the corresponding trait method
2019-07-20T01:02:01.7005118Z error[E0276]: impl has stricter requirements than trait
2019-07-20T01:02:01.7005475Z   --> /checkout/src/test/ui/compare-method/traits-misc-mismatch-1.rs:54:5
2019-07-20T01:02:01.7005517Z    |
2019-07-20T01:02:01.7005517Z    |
2019-07-20T01:02:01.7005575Z LL |     fn test_error8_fn<T: B>(&self);
2019-07-20T01:02:01.7005796Z    |     ------------------------------- definition of `test_error8_fn` from trait
2019-07-20T01:02:01.7005837Z ...
2019-07-20T01:02:01.7005893Z LL |     fn test_error8_fn<T: C>(&self) {}
2019-07-20T01:02:01.7005935Z    |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ impl has extra requirement `T: C`
2019-07-20T01:02:01.7006018Z error[E0276]: impl has stricter requirements than trait
2019-07-20T01:02:01.7006234Z   --> /checkout/src/test/ui/compare-method/traits-misc-mismatch-1.rs:67:5
2019-07-20T01:02:01.7006275Z    |
2019-07-20T01:02:01.7006275Z    |
2019-07-20T01:02:01.7006312Z LL |     fn method<G:Getter<isize>>(&self);
2019-07-20T01:02:01.7006595Z    |     ---------------------------------- definition of `method` from trait
2019-07-20T01:02:01.7006635Z ...
2019-07-20T01:02:01.7006748Z LL |     fn method<G: Getter<usize>>(&self) {}
2019-07-20T01:02:01.7006819Z    |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ impl has extra requirement `G: Getter<usize>`
2019-07-20T01:02:01.7006884Z error: aborting due to 7 previous errors
2019-07-20T01:02:01.7006908Z 
2019-07-20T01:02:01.7006964Z Some errors have detailed explanations: E0276, E0277.
2019-07-20T01:02:01.7007201Z For more information about an error, try `rustc --explain E0276`.
2019-07-20T01:02:01.7007201Z For more information about an error, try `rustc --explain E0276`.
2019-07-20T01:02:01.7007231Z 
2019-07-20T01:02:01.7007435Z ------------------------------------------
2019-07-20T01:02:01.7007463Z 
2019-07-20T01:02:01.7007484Z 
2019-07-20T01:02:01.7022584Z ---- [ui] ui/const-generics/array-impls/core-traits-no-impls-length-33.rs stdout ----
2019-07-20T01:02:01.7022861Z diff of stderr:
2019-07-20T01:02:01.7023052Z 
2019-07-20T01:02:01.7023289Z - error[E0277]: arrays only have std trait implementations for lengths 0..=32
2019-07-20T01:02:01.7023495Z + error[E0277]: `[usize; 33]` doesn't implement `std::fmt::Debug`
2019-07-20T01:02:01.7023975Z 2   --> $DIR/core-traits-no-impls-length-33.rs:2:22
2019-07-20T01:02:01.7024016Z 3    |
2019-07-20T01:02:01.7024052Z 4 LL |     println!("{:?}", [0_usize; 33]);
2019-07-20T01:02:01.7024077Z 
2019-07-20T01:02:01.7024337Z -    |                      ^^^^^^^^^^^^^ the trait `std::array::LengthAtMost32` is not implemented for `[usize; 33]`
2019-07-20T01:02:01.7024588Z +    |                      ^^^^^^^^^^^^^ `[usize; 33]` cannot be formatted using `{:?}` because it doesn't implement `std::fmt::Debug`
2019-07-20T01:02:01.7024657Z 6    |
2019-07-20T01:02:01.7024880Z -    = note: required because of the requirements on the impl of `std::fmt::Debug` for `[usize; 33]`
2019-07-20T01:02:01.7024928Z +    = help: the trait `std::fmt::Debug` is not implemented for `[usize; 33]`
2019-07-20T01:02:01.7024989Z 8    = note: required by `std::fmt::Debug::fmt`
2019-07-20T01:02:01.7025025Z 9 
2019-07-20T01:02:01.7025225Z - error[E0277]: arrays only have std trait implementations for lengths 0..=32
2019-07-20T01:02:01.7025305Z + error[E0277]: the trait bound `[usize; 33]: std::cmp::Eq` is not satisfied
2019-07-20T01:02:01.7025491Z 11   --> $DIR/core-traits-no-impls-length-33.rs:9:9
2019-07-20T01:02:01.7025529Z 12    |
2019-07-20T01:02:01.7025563Z 13 LL |     set.insert([0_usize; 33]);
2019-07-20T01:02:01.7025605Z 
2019-07-20T01:02:01.7025817Z -    |         ^^^^^^ the trait `std::array::LengthAtMost32` is not implemented for `[usize; 33]`
2019-07-20T01:02:01.7025866Z +    |         ^^^^^^ the trait `std::cmp::Eq` is not implemented for `[usize; 33]`
2019-07-20T01:02:01.7025921Z 15    |
2019-07-20T01:02:01.7026132Z -    = note: required because of the requirements on the impl of `std::cmp::Eq` for `[usize; 33]`
2019-07-20T01:02:01.7026176Z +    = help: the following implementations were found:
2019-07-20T01:02:01.7026233Z +              <[T; _] as std::cmp::Eq>
2019-07-20T01:02:01.7026269Z +              <[T] as std::cmp::Eq>
2019-07-20T01:02:01.7026303Z 17 
2019-07-20T01:02:01.7026507Z + error[E0277]: the trait bound `[usize; 33]: std::hash::Hash` is not satisfied
2019-07-20T01:02:01.7026748Z +   --> $DIR/core-traits-no-impls-length-33.rs:9:9
2019-07-20T01:02:01.7026786Z +    |
2019-07-20T01:02:01.7026820Z + LL |     set.insert([0_usize; 33]);
2019-07-20T01:02:01.7026871Z +    |         ^^^^^^ the trait `std::hash::Hash` is not implemented for `[usize; 33]`
2019-07-20T01:02:01.7026961Z +    = help: the following implementations were found:
2019-07-20T01:02:01.7026961Z +    = help: the following implementations were found:
2019-07-20T01:02:01.7026998Z +              <[T; _] as std::hash::Hash>
2019-07-20T01:02:01.7027052Z +              <[T] as std::hash::Hash>
2019-07-20T01:02:01.7027087Z + 
2019-07-20T01:02:01.7027125Z + error[E0277]: the trait bound `[usize; 33]: std::cmp::Eq` is not satisfied
2019-07-20T01:02:01.7027316Z +   --> $DIR/core-traits-no-impls-length-33.rs:8:19
2019-07-20T01:02:01.7027406Z + LL |     let mut set = HashSet::new();
2019-07-20T01:02:01.7027406Z + LL |     let mut set = HashSet::new();
2019-07-20T01:02:01.7027523Z +    |                   ^^^^^^^^^^^^ the trait `std::cmp::Eq` is not implemented for `[usize; 33]`
2019-07-20T01:02:01.7027631Z +    = help: the following implementations were found:
2019-07-20T01:02:01.7027631Z +    = help: the following implementations were found:
2019-07-20T01:02:01.7027668Z +              <[T; _] as std::cmp::Eq>
2019-07-20T01:02:01.7027722Z +              <[T] as std::cmp::Eq>
2019-07-20T01:02:01.7027761Z +    = note: required by `std::collections::HashSet::<T>::new`
2019-07-20T01:02:01.7027796Z + 
2019-07-20T01:02:01.7027852Z + error[E0277]: the trait bound `[usize; 33]: std::hash::Hash` is not satisfied
2019-07-20T01:02:01.7028064Z +   --> $DIR/core-traits-no-impls-length-33.rs:8:19
2019-07-20T01:02:01.7028136Z + LL |     let mut set = HashSet::new();
2019-07-20T01:02:01.7028136Z + LL |     let mut set = HashSet::new();
2019-07-20T01:02:01.7028197Z +    |                   ^^^^^^^^^^^^ the trait `std::hash::Hash` is not implemented for `[usize; 33]`
2019-07-20T01:02:01.7028270Z +    = help: the following implementations were found:
2019-07-20T01:02:01.7028270Z +    = help: the following implementations were found:
2019-07-20T01:02:01.7028334Z +              <[T; _] as std::hash::Hash>
2019-07-20T01:02:01.7028377Z +              <[T] as std::hash::Hash>
2019-07-20T01:02:01.7028415Z +    = note: required by `std::collections::HashSet::<T>::new`
2019-07-20T01:02:01.7028468Z + 
2019-07-20T01:02:01.7028504Z 18 error[E0369]: binary operation `==` cannot be applied to type `[usize; 33]`
2019-07-20T01:02:01.7028697Z 19   --> $DIR/core-traits-no-impls-length-33.rs:14:19
2019-07-20T01:02:01.7028776Z 
2019-07-20T01:02:01.7028776Z 
2019-07-20T01:02:01.7029404Z 48              <&'a mut [T] as std::iter::IntoIterator>
2019-07-20T01:02:01.7029633Z 50 
2019-07-20T01:02:01.7029900Z - error: aborting due to 5 previous errors
2019-07-20T01:02:01.7029953Z + error: aborting due to 8 previous errors
2019-07-20T01:02:01.7030044Z 52 
2019-07-20T01:02:01.7030044Z 52 
2019-07-20T01:02:01.7030093Z 53 Some errors have detailed explanations: E0277, E0369.
2019-07-20T01:02:01.7030346Z 54 For more information about an error, try `rustc --explain E0277`.
2019-07-20T01:02:01.7030404Z 
2019-07-20T01:02:01.7030484Z 
2019-07-20T01:02:01.7030532Z The actual stderr differed from the expected stderr.
2019-07-20T01:02:01.7030892Z Actual stderr saved to /checkout/obj/build/x86_64-unknown-linux-gnu/test/ui/const-generics/array-impls/core-traits-no-impls-length-33/core-traits-no-impls-length-33.stderr
2019-07-20T01:02:01.7031205Z To update references, rerun the tests and pass the `--bless` flag
2019-07-20T01:02:01.7031505Z To only update this specific test, also pass `--test-args const-generics/array-impls/core-traits-no-impls-length-33.rs`
2019-07-20T01:02:01.7031647Z error: 1 errors occurred comparing output.
2019-07-20T01:02:01.7031695Z status: exit code: 1
2019-07-20T01:02:01.7031695Z status: exit code: 1
2019-07-20T01:02:01.7032540Z command: "/checkout/obj/build/x86_64-unknown-linux-gnu/stage2/bin/rustc" "/checkout/src/test/ui/const-generics/array-impls/core-traits-no-impls-length-33.rs" "-Zthreads=1" "--target=x86_64-unknown-linux-gnu" "--error-format" "json" "-Zui-testing" "-C" "prefer-dynamic" "--out-dir" "/checkout/obj/build/x86_64-unknown-linux-gnu/test/ui/const-generics/array-impls/core-traits-no-impls-length-33" "-Crpath" "-O" "-Cdebuginfo=0" "-Zunstable-options" "-Lnative=/checkout/obj/build/x86_64-unknown-linux-gnu/native/rust-test-helpers" "-L" "/checkout/obj/build/x86_64-unknown-linux-gnu/test/ui/const-generics/array-impls/core-traits-no-impls-length-33/auxiliary" "-A" "unused"
2019-07-20T01:02:01.7033163Z ------------------------------------------
2019-07-20T01:02:01.7033234Z 
2019-07-20T01:02:01.7033399Z ------------------------------------------
2019-07-20T01:02:01.7033434Z stderr:
2019-07-20T01:02:01.7033434Z stderr:
2019-07-20T01:02:01.7033631Z ------------------------------------------
2019-07-20T01:02:01.7033817Z error[E0277]: `[usize; 33]` doesn't implement `std::fmt::Debug`
2019-07-20T01:02:01.7034018Z   --> /checkout/src/test/ui/const-generics/array-impls/core-traits-no-impls-length-33.rs:2:22
2019-07-20T01:02:01.7058193Z    |
2019-07-20T01:02:01.7058382Z LL |     println!("{:?}", [0_usize; 33]);
2019-07-20T01:02:01.7058818Z    |                      ^^^^^^^^^^^^^ `[usize; 33]` cannot be formatted using `{:?}` because it doesn't implement `std::fmt::Debug`
2019-07-20T01:02:01.7076600Z    |
2019-07-20T01:02:01.7076651Z    = help: the trait `std::fmt::Debug` is not implemented for `[usize; 33]`
2019-07-20T01:02:01.7076693Z    = note: required by `std::fmt::Debug::fmt`
2019-07-20T01:02:01.7076740Z 
2019-07-20T01:02:01.7076778Z error[E0277]: the trait bound `[usize; 33]: std::cmp::Eq` is not satisfied
2019-07-20T01:02:01.7077171Z   --> /checkout/src/test/ui/const-generics/array-impls/core-traits-no-impls-length-33.rs:9:9
2019-07-20T01:02:01.7077229Z    |
2019-07-20T01:02:01.7077266Z LL |     set.insert([0_usize; 33]);
2019-07-20T01:02:01.7077308Z    |         ^^^^^^ the trait `std::cmp::Eq` is not implemented for `[usize; 33]`
2019-07-20T01:02:01.7077389Z    = help: the following implementations were found:
2019-07-20T01:02:01.7077389Z    = help: the following implementations were found:
2019-07-20T01:02:01.7077444Z              <[T; _] as std::cmp::Eq>
2019-07-20T01:02:01.7077480Z              <[T] as std::cmp::Eq>
2019-07-20T01:02:01.7077511Z 
2019-07-20T01:02:01.7077549Z error[E0277]: the trait bound `[usize; 33]: std::hash::Hash` is not satisfied
2019-07-20T01:02:01.7077793Z   --> /checkout/src/test/ui/const-generics/array-impls/core-traits-no-impls-length-33.rs:9:9
2019-07-20T01:02:01.7077846Z    |
2019-07-20T01:02:01.7077881Z LL |     set.insert([0_usize; 33]);
2019-07-20T01:02:01.7077922Z    |         ^^^^^^ the trait `std::hash::Hash` is not implemented for `[usize; 33]`
2019-07-20T01:02:01.7078008Z    = help: the following implementations were found:
2019-07-20T01:02:01.7078008Z    = help: the following implementations were found:
2019-07-20T01:02:01.7078046Z              <[T; _] as std::hash::Hash>
2019-07-20T01:02:01.7078081Z              <[T] as std::hash::Hash>
2019-07-20T01:02:01.7078120Z 
2019-07-20T01:02:01.7078157Z error[E0277]: the trait bound `[usize; 33]: std::cmp::Eq` is not satisfied
2019-07-20T01:02:01.7078401Z   --> /checkout/src/test/ui/const-generics/array-impls/core-traits-no-impls-length-33.rs:8:19
2019-07-20T01:02:01.7078487Z LL |     let mut set = HashSet::new();
2019-07-20T01:02:01.7078487Z LL |     let mut set = HashSet::new();
2019-07-20T01:02:01.7078529Z    |                   ^^^^^^^^^^^^ the trait `std::cmp::Eq` is not implemented for `[usize; 33]`
2019-07-20T01:02:01.7078611Z    = help: the following implementations were found:
2019-07-20T01:02:01.7078611Z    = help: the following implementations were found:
2019-07-20T01:02:01.7078646Z              <[T; _] as std::cmp::Eq>
2019-07-20T01:02:01.7078681Z              <[T] as std::cmp::Eq>
2019-07-20T01:02:01.7078732Z    = note: required by `std::collections::HashSet::<T>::new`
2019-07-20T01:02:01.7078757Z 
2019-07-20T01:02:01.7078794Z error[E0277]: the trait bound `[usize; 33]: std::hash::Hash` is not satisfied
2019-07-20T01:02:01.7079539Z   --> /checkout/src/test/ui/const-generics/array-impls/core-traits-no-impls-length-33.rs:8:19
2019-07-20T01:02:01.7079643Z LL |     let mut set = HashSet::new();
2019-07-20T01:02:01.7079643Z LL |     let mut set = HashSet::new();
2019-07-20T01:02:01.7079873Z    |                   ^^^^^^^^^^^^ the trait `std::hash::Hash` is not implemented for `[usize; 33]`
2019-07-20T01:02:01.7079968Z    = help: the following implementations were found:
2019-07-20T01:02:01.7079968Z    = help: the following implementations were found:
2019-07-20T01:02:01.7080016Z              <[T; _] as std::hash::Hash>
2019-07-20T01:02:01.7080069Z              <[T] as std::hash::Hash>
2019-07-20T01:02:01.7080118Z    = note: required by `std::collections::HashSet::<T>::new`
2019-07-20T01:02:01.7080150Z 
2019-07-20T01:02:01.7080207Z error[E0369]: binary operation `==` cannot be applied to type `[usize; 33]`
2019-07-20T01:02:01.7080555Z   --> /checkout/src/test/ui/const-generics/array-impls/core-traits-no-impls-length-33.rs:14:19
2019-07-20T01:02:01.7080609Z    |
2019-07-20T01:02:01.7080672Z LL |     [0_usize; 33] == [1_usize; 33]
2019-07-20T01:02:01.7080908Z    |     ------------- ^^ ------------- [usize; 33]
2019-07-20T01:02:01.7081002Z    |     [usize; 33]
2019-07-20T01:02:01.7081072Z    |
2019-07-20T01:02:01.7081072Z    |
2019-07-20T01:02:01.7081204Z    = note: an implementation of `std::cmp::PartialEq` might be missing for `[usize; 33]`
2019-07-20T01:02:01.7081246Z 
2019-07-20T01:02:01.7081308Z error[E0369]: binary operation `<` cannot be applied to type `[usize; 33]`
2019-07-20T01:02:01.7081621Z   --> /checkout/src/test/ui/const-generics/array-impls/core-traits-no-impls-length-33.rs:19:19
2019-07-20T01:02:01.7081673Z    |
2019-07-20T01:02:01.7081724Z LL |     [0_usize; 33] < [1_usize; 33]
2019-07-20T01:02:01.7081959Z    |     ------------- ^ ------------- [usize; 33]
2019-07-20T01:02:01.7082049Z    |     [usize; 33]
2019-07-20T01:02:01.7082100Z    |
2019-07-20T01:02:01.7082100Z    |
2019-07-20T01:02:01.7082150Z    = note: an implementation of `std::cmp::PartialOrd` might be missing for `[usize; 33]`
2019-07-20T01:02:01.7082184Z 
2019-07-20T01:02:01.7082240Z error[E0277]: the trait bound `&[usize; 33]: std::iter::IntoIterator` is not satisfied
2019-07-20T01:02:01.7082531Z   --> /checkout/src/test/ui/const-generics/array-impls/core-traits-no-impls-length-33.rs:24:14
2019-07-20T01:02:01.7082591Z    |
2019-07-20T01:02:01.7082832Z LL |     for _ in &[0_usize; 33] {
2019-07-20T01:02:01.7082874Z    |              ^^^^^^^^^^^^^^ the trait `std::iter::IntoIterator` is not implemented for `&[usize; 33]`
2019-07-20T01:02:01.7082942Z    = help: the following implementations were found:
2019-07-20T01:02:01.7082942Z    = help: the following implementations were found:
2019-07-20T01:02:01.7083131Z              <&'a [T; _] as std::iter::IntoIterator>
2019-07-20T01:02:01.7083301Z              <&'a [T] as std::iter::IntoIterator>
2019-07-20T01:02:01.7083474Z              <&'a mut [T; _] as std::iter::IntoIterator>
2019-07-20T01:02:01.7083663Z              <&'a mut [T] as std::iter::IntoIterator>
2019-07-20T01:02:01.7083726Z 
2019-07-20T01:02:01.7083769Z error: aborting due to 8 previous errors
2019-07-20T01:02:01.7083791Z 
2019-07-20T01:02:01.7083824Z Some errors have detailed explanations: E0277, E0369.
---
2019-07-20T01:02:01.7084509Z 
2019-07-20T01:02:01.7084541Z 4 LL | #![feature(const_generics)]
2019-07-20T01:02:01.7084584Z 5    |            ^^^^^^^^^^^^^^
2019-07-20T01:02:01.7084616Z 6 
2019-07-20T01:02:01.7084805Z - error[E0277]: arrays only have std trait implementations for lengths 0..=32
2019-07-20T01:02:01.7084992Z + error[E0277]: `&[T; _]` doesn't implement `std::fmt::Debug`
2019-07-20T01:02:01.7085156Z 8   --> $DIR/broken-mir-2.rs:7:36
2019-07-20T01:02:01.7085191Z 9    |
2019-07-20T01:02:01.7085225Z 10 LL | struct S<T: Debug, const N: usize>([T; N]);
2019-07-20T01:02:01.7085254Z 
2019-07-20T01:02:01.7085576Z -    |                                    ^^^^^^ the trait `std::array::LengthAtMost32` is not implemented for `[T; _]`
2019-07-20T01:02:01.7085813Z +    |                                    ^^^^^^ `&[T; _]` cannot be formatted using `{:?}` because it doesn't implement `std::fmt::Debug`
2019-07-20T01:02:01.7085863Z 12    |
2019-07-20T01:02:01.7086061Z -    = note: required because of the requirements on the impl of `std::fmt::Debug` for `[T; _]`
2019-07-20T01:02:01.7086262Z -    = note: required because of the requirements on the impl of `std::fmt::Debug` for `&[T; _]`
2019-07-20T01:02:01.7086320Z +    = help: the trait `std::fmt::Debug` is not implemented for `&[T; _]`
2019-07-20T01:02:01.7086362Z 15    = note: required for the cast to the object type `dyn std::fmt::Debug`
2019-07-20T01:02:01.7086443Z 17 error: aborting due to previous error
2019-07-20T01:02:01.7086465Z 
2019-07-20T01:02:01.7086484Z 
2019-07-20T01:02:01.7086518Z The actual stderr differed from the expected stderr.
2019-07-20T01:02:01.7086518Z The actual stderr differed from the expected stderr.
2019-07-20T01:02:01.7086824Z Actual stderr saved to /checkout/obj/build/x86_64-unknown-linux-gnu/test/ui/const-generics/broken-mir-2/broken-mir-2.stderr
2019-07-20T01:02:01.7087043Z To update references, rerun the tests and pass the `--bless` flag
2019-07-20T01:02:01.7087242Z To only update this specific test, also pass `--test-args const-generics/broken-mir-2.rs`
2019-07-20T01:02:01.7087312Z error: 1 errors occurred comparing output.
2019-07-20T01:02:01.7087345Z status: exit code: 1
2019-07-20T01:02:01.7087345Z status: exit code: 1
2019-07-20T01:02:01.7087902Z command: "/checkout/obj/build/x86_64-unknown-linux-gnu/stage2/bin/rustc" "/checkout/src/test/ui/const-generics/broken-mir-2.rs" "-Zthreads=1" "--target=x86_64-unknown-linux-gnu" "--error-format" "json" "-Zui-testing" "-C" "prefer-dynamic" "--out-dir" "/checkout/obj/build/x86_64-unknown-linux-gnu/test/ui/const-generics/broken-mir-2" "-Crpath" "-O" "-Cdebuginfo=0" "-Zunstable-options" "-Lnative=/checkout/obj/build/x86_64-unknown-linux-gnu/native/rust-test-helpers" "-L" "/checkout/obj/build/x86_64-unknown-linux-gnu/test/ui/const-generics/broken-mir-2/auxiliary" "-A" "unused"
2019-07-20T01:02:01.7088153Z ------------------------------------------
2019-07-20T01:02:01.7088179Z 
2019-07-20T01:02:01.7088345Z ------------------------------------------
2019-07-20T01:02:01.7088379Z stderr:
2019-07-20T01:02:01.7088379Z stderr:
2019-07-20T01:02:01.7088543Z ------------------------------------------
2019-07-20T01:02:01.7088585Z warning: the feature `const_generics` is incomplete and may cause the compiler to crash
2019-07-20T01:02:01.7089193Z   --> /checkout/src/test/ui/const-generics/broken-mir-2.rs:1:12
2019-07-20T01:02:01.7089269Z    |
2019-07-20T01:02:01.7089313Z LL | #![feature(const_generics)]
2019-07-20T01:02:01.7089359Z    |            ^^^^^^^^^^^^^^
2019-07-20T01:02:01.7089389Z 
2019-07-20T01:02:01.7089649Z error[E0277]: `&[T; _]` doesn't implement `std::fmt::Debug`
2019-07-20T01:02:01.7089896Z   --> /checkout/src/test/ui/const-generics/broken-mir-2.rs:7:36
2019-07-20T01:02:01.7089958Z    |
2019-07-20T01:02:01.7090026Z LL | struct S<T: Debug, const N: usize>([T; N]);
2019-07-20T01:02:01.7090343Z    |                                    ^^^^^^ `&[T; _]` cannot be formatted using `{:?}` because it doesn't implement `std::fmt::Debug`
2019-07-20T01:02:01.7090400Z    |
2019-07-20T01:02:01.7090464Z    = help: the trait `std::fmt::Debug` is not implemented for `&[T; _]`
2019-07-20T01:02:01.7090519Z    = note: required for the cast to the object type `dyn std::fmt::Debug`
2019-07-20T01:02:01.7090603Z error: aborting due to previous error
2019-07-20T01:02:01.7090633Z 
2019-07-20T01:02:01.7090880Z For more information about this error, try `rustc --explain E0277`.
2019-07-20T01:02:01.7090916Z 
---
2019-07-20T01:02:01.7091650Z 
2019-07-20T01:02:01.7091702Z 4 LL | #![feature(const_generics)]
2019-07-20T01:02:01.7091749Z 5    |            ^^^^^^^^^^^^^^
2019-07-20T01:02:01.7091798Z 6 
2019-07-20T01:02:01.7092087Z - error[E0277]: arrays only have std trait implementations for lengths 0..=32
2019-07-20T01:02:01.7092491Z + error[E0277]: `&[u32; _]` doesn't implement `std::fmt::Debug`
2019-07-20T01:02:01.7092714Z 9    |
2019-07-20T01:02:01.7092714Z 9    |
2019-07-20T01:02:01.7092748Z 10 LL |     a: [u32; N],
2019-07-20T01:02:01.7092770Z 
2019-07-20T01:02:01.7093421Z -    |     ^^^^^^^^^^^ the trait `std::array::LengthAtMost32` is not implemented for `[u32; _]`
2019-07-20T01:02:01.7093847Z +    |     ^^^^^^^^^^^ `&[u32; _]` cannot be formatted using `{:?}` because it doesn't implement `std::fmt::Debug`
2019-07-20T01:02:01.7093885Z 12    |
2019-07-20T01:02:01.7094099Z -    = note: required because of the requirements on the impl of `std::fmt::Debug` for `[u32; _]`
2019-07-20T01:02:01.7094408Z -    = note: required because of the requirements on the impl of `std::fmt::Debug` for `&[u32; _]`
2019-07-20T01:02:01.7094462Z +    = help: the trait `std::fmt::Debug` is not implemented for `&[u32; _]`
2019-07-20T01:02:01.7094521Z 15    = note: required for the cast to the object type `dyn std::fmt::Debug`
2019-07-20T01:02:01.7094588Z 17 error: aborting due to previous error
2019-07-20T01:02:01.7094610Z 
2019-07-20T01:02:01.7094641Z 
2019-07-20T01:02:01.7094674Z The actual stderr differed from the expected stderr.
2019-07-20T01:02:01.7094674Z The actual stderr differed from the expected stderr.
2019-07-20T01:02:01.7094948Z Actual stderr saved to /checkout/obj/build/x86_64-unknown-linux-gnu/test/ui/const-generics/derive-debug-array-wrapper/derive-debug-array-wrapper.stderr
2019-07-20T01:02:01.7095145Z To update references, rerun the tests and pass the `--bless` flag
2019-07-20T01:02:01.7095352Z To only update this specific test, also pass `--test-args const-generics/derive-debug-array-wrapper.rs`
2019-07-20T01:02:01.7095433Z error: 1 errors occurred comparing output.
2019-07-20T01:02:01.7095468Z status: exit code: 1
2019-07-20T01:02:01.7095468Z status: exit code: 1
2019-07-20T01:02:01.7096042Z command: "/checkout/obj/build/x86_64-unknown-linux-gnu/stage2/bin/rustc" "/checkout/src/test/ui/const-generics/derive-debug-array-wrapper.rs" "-Zthreads=1" "--target=x86_64-unknown-linux-gnu" "--error-format" "json" "-Zui-testing" "-C" "prefer-dynamic" "--out-dir" "/checkout/obj/build/x86_64-unknown-linux-gnu/test/ui/const-generics/derive-debug-array-wrapper" "-Crpath" "-O" "-Cdebuginfo=0" "-Zunstable-options" "-Lnative=/checkout/obj/build/x86_64-unknown-linux-gnu/native/rust-test-helpers" "-L" "/checkout/obj/build/x86_64-unknown-linux-gnu/test/ui/const-generics/derive-debug-array-wrapper/auxiliary" "-A" "unused"
2019-07-20T01:02:01.7096287Z ------------------------------------------
2019-07-20T01:02:01.7096312Z 
2019-07-20T01:02:01.7096484Z ------------------------------------------
2019-07-20T01:02:01.7096519Z stderr:
2019-07-20T01:02:01.7096519Z stderr:
2019-07-20T01:02:01.7096693Z ------------------------------------------
2019-07-20T01:02:01.7096753Z warning: the feature `const_generics` is incomplete and may cause the compiler to crash
2019-07-20T01:02:01.7096946Z   --> /checkout/src/test/ui/const-generics/derive-debug-array-wrapper.rs:1:12
2019-07-20T01:02:01.7096984Z    |
2019-07-20T01:02:01.7097033Z LL | #![feature(const_generics)]
2019-07-20T01:02:01.7097067Z    |            ^^^^^^^^^^^^^^
2019-07-20T01:02:01.7097088Z 
2019-07-20T01:02:01.7097279Z error[E0277]: `&[u32; _]` doesn't implement `std::fmt::Debug`
2019-07-20T01:02:01.7097507Z    |
2019-07-20T01:02:01.7097507Z    |
2019-07-20T01:02:01.7097544Z LL |     a: [u32; N], //~ ERROR arrays only have std trait implementations for lengths 0..=32
2019-07-20T01:02:01.7097772Z    |     ^^^^^^^^^^^ `&[u32; _]` cannot be formatted using `{:?}` because it doesn't implement `std::fmt::Debug`
2019-07-20T01:02:01.7097812Z    |
2019-07-20T01:02:01.7097958Z    = help: the trait `std::fmt::Debug` is not implemented for `&[u32; _]`
2019-07-20T01:02:01.7097998Z    = note: required for the cast to the object type `dyn std::fmt::Debug`
2019-07-20T01:02:01.7098053Z error: aborting due to previous error
2019-07-20T01:02:01.7098084Z 
2019-07-20T01:02:01.7098295Z For more information about this error, try `rustc --explain E0277`.
2019-07-20T01:02:01.7098322Z 
2019-07-20T01:02:01.7098322Z 
2019-07-20T01:02:01.7098481Z ------------------------------------------
2019-07-20T01:02:01.7098511Z 
2019-07-20T01:02:01.7098530Z 
2019-07-20T01:02:01.7098714Z ---- [ui] ui/derives/derives-span-Debug-enum-struct-variant.rs stdout ----
2019-07-20T01:02:01.7098752Z diff of stderr:
2019-07-20T01:02:01.7098780Z 
2019-07-20T01:02:01.7098952Z - error[E0277]: `Error` doesn't implement `std::fmt::Debug`
2019-07-20T01:02:01.7099538Z + error[E0277]: `&Error` doesn't implement `std::fmt::Debug`
2019-07-20T01:02:01.7099861Z 3    |
2019-07-20T01:02:01.7100002Z 4 LL |      x: Error
2019-07-20T01:02:01.7100040Z 
2019-07-20T01:02:01.7100040Z 
2019-07-20T01:02:01.7100330Z -    |      ^^^^^^^^ `Error` cannot be formatted using `{:?}`
2019-07-20T01:02:01.7100623Z +    |      ^^^^^^^^ `&Error` cannot be formatted using `{:?}` because it doesn't implement `std::fmt::Debug`
2019-07-20T01:02:01.7100676Z 6    |
2019-07-20T01:02:01.7100938Z -    = help: the trait `std::fmt::Debug` is not implemented for `Error`
2019-07-20T01:02:01.7101198Z -    = note: add `#[derive(Debug)]` or manually implement `std::fmt::Debug`
2019-07-20T01:02:01.7101471Z -    = note: required because of the requirements on the impl of `std::fmt::Debug` for `&Error`
2019-07-20T01:02:01.7101544Z +    = help: the trait `std::fmt::Debug` is not implemented for `&Error`
2019-07-20T01:02:01.7101600Z 10    = note: required for the cast to the object type `dyn std::fmt::Debug`
2019-07-20T01:02:01.7101692Z 12 error: aborting due to previous error
2019-07-20T01:02:01.7101739Z 
2019-07-20T01:02:01.7101772Z 
2019-07-20T01:02:01.7101818Z The actual stderr differed from the expected stderr.
2019-07-20T01:02:01.7101818Z The actual stderr differed from the expected stderr.
2019-07-20T01:02:01.7102172Z Actual stderr saved to /checkout/obj/build/x86_64-unknown-linux-gnu/test/ui/derives/derives-span-Debug-enum-struct-variant/derives-span-Debug-enum-struct-variant.stderr
2019-07-20T01:02:01.7102440Z To update references, rerun the tests and pass the `--bless` flag
2019-07-20T01:02:01.7102932Z To only update this specific test, also pass `--test-args derives/derives-span-Debug-enum-struct-variant.rs`
2019-07-20T01:02:01.7103179Z error: 1 errors occurred comparing output.
2019-07-20T01:02:01.7103214Z status: exit code: 1
2019-07-20T01:02:01.7103214Z status: exit code: 1
2019-07-20T01:02:01.7103975Z command: "/checkout/obj/build/x86_64-unknown-linux-gnu/stage2/bin/rustc" "/checkout/src/test/ui/derives/derives-span-Debug-enum-struct-variant.rs" "-Zthreads=1" "--target=x86_64-unknown-linux-gnu" "--error-format" "json" "-Zui-testing" "-C" "prefer-dynamic" "--out-dir" "/checkout/obj/build/x86_64-unknown-linux-gnu/test/ui/derives/derives-span-Debug-enum-struct-variant" "-Crpath" "-O" "-Cdebuginfo=0" "-Zunstable-options" "-Lnative=/checkout/obj/build/x86_64-unknown-linux-gnu/native/rust-test-helpers" "-L" "/checkout/obj/build/x86_64-unknown-linux-gnu/test/ui/derives/derives-span-Debug-enum-struct-variant/auxiliary" "-A" "unused"
2019-07-20T01:02:01.7104234Z ------------------------------------------
2019-07-20T01:02:01.7104259Z 
2019-07-20T01:02:01.7104423Z ------------------------------------------
2019-07-20T01:02:01.7104458Z stderr:
2019-07-20T01:02:01.7104458Z stderr:
2019-07-20T01:02:01.7104633Z ------------------------------------------
2019-07-20T01:02:01.7104810Z error[E0277]: `&Error` doesn't implement `std::fmt::Debug`
2019-07-20T01:02:01.7105057Z    |
2019-07-20T01:02:01.7105057Z    |
2019-07-20T01:02:01.7105090Z LL |      x: Error //~ ERROR
2019-07-20T01:02:01.7105304Z    |      ^^^^^^^^ `&Error` cannot be formatted using `{:?}` because it doesn't implement `std::fmt::Debug`
2019-07-20T01:02:01.7105436Z    |
2019-07-20T01:02:01.7105474Z    = help: the trait `std::fmt::Debug` is not implemented for `&Error`
2019-07-20T01:02:01.7105515Z    = note: required for the cast to the object type `dyn std::fmt::Debug`
2019-07-20T01:02:01.7105583Z error: aborting due to previous error
2019-07-20T01:02:01.7105605Z 
2019-07-20T01:02:01.7105816Z For more information about this error, try `rustc --explain E0277`.
2019-07-20T01:02:01.7105852Z 
2019-07-20T01:02:01.7105852Z 
2019-07-20T01:02:01.7106016Z ------------------------------------------
2019-07-20T01:02:01.7106040Z 
2019-07-20T01:02:01.7106059Z 
2019-07-20T01:02:01.7106236Z ---- [ui] ui/derives/derives-span-Debug-enum.rs stdout ----
2019-07-20T01:02:01.7106273Z diff of stderr:
2019-07-20T01:02:01.7106293Z 
2019-07-20T01:02:01.7106466Z - error[E0277]: `Error` doesn't implement `std::fmt::Debug`
2019-07-20T01:02:01.7106653Z + error[E0277]: `&Error` doesn't implement `std::fmt::Debug`
2019-07-20T01:02:01.7106934Z 3    |
2019-07-20T01:02:01.7106973Z 4 LL |      Error
2019-07-20T01:02:01.7106994Z 
2019-07-20T01:02:01.7106994Z 
2019-07-20T01:02:01.7107192Z -    |      ^^^^^ `Error` cannot be formatted using `{:?}`
2019-07-20T01:02:01.7107400Z +    |      ^^^^^ `&Error` cannot be formatted using `{:?}` because it doesn't implement `std::fmt::Debug`
2019-07-20T01:02:01.7107452Z 6    |
2019-07-20T01:02:01.7107633Z -    = help: the trait `std::fmt::Debug` is not implemented for `Error`
2019-07-20T01:02:01.7107819Z -    = note: add `#[derive(Debug)]` or manually implement `std::fmt::Debug`
2019-07-20T01:02:01.7108035Z -    = note: required because of the requirements on the impl of `std::fmt::Debug` for `&Error`
2019-07-20T01:02:01.7108079Z +    = help: the trait `std::fmt::Debug` is not implemented for `&Error`
2019-07-20T01:02:01.7108118Z 10    = note: required for the cast to the object type `dyn std::fmt::Debug`
2019-07-20T01:02:01.7108214Z 12 error: aborting due to previous error
2019-07-20T01:02:01.7108236Z 
2019-07-20T01:02:01.7108255Z 
2019-07-20T01:02:01.7108296Z The actual stderr differed from the expected stderr.
2019-07-20T01:02:01.7108296Z The actual stderr differed from the expected stderr.
2019-07-20T01:02:01.7108535Z Actual stderr saved to /checkout/obj/build/x86_64-unknown-linux-gnu/test/ui/derives/derives-span-Debug-enum/derives-span-Debug-enum.stderr
2019-07-20T01:02:01.7108721Z To update references, rerun the tests and pass the `--bless` flag
2019-07-20T01:02:01.7108937Z To only update this specific test, also pass `--test-args derives/derives-span-Debug-enum.rs`
2019-07-20T01:02:01.7109145Z error: 1 errors occurred comparing output.
2019-07-20T01:02:01.7109372Z status: exit code: 1
2019-07-20T01:02:01.7109372Z status: exit code: 1
2019-07-20T01:02:01.7110173Z command: "/checkout/obj/build/x86_64-unknown-linux-gnu/stage2/bin/rustc" "/checkout/src/test/ui/derives/derives-span-Debug-enum.rs" "-Zthreads=1" "--target=x86_64-unknown-linux-gnu" "--error-format" "json" "-Zui-testing" "-C" "prefer-dynamic" "--out-dir" "/checkout/obj/build/x86_64-unknown-linux-gnu/test/ui/derives/derives-span-Debug-enum" "-Crpath" "-O" "-Cdebuginfo=0" "-Zunstable-options" "-Lnative=/checkout/obj/build/x86_64-unknown-linux-gnu/native/rust-test-helpers" "-L" "/checkout/obj/build/x86_64-unknown-linux-gnu/test/ui/derives/derives-span-Debug-enum/auxiliary" "-A" "unused"
2019-07-20T01:02:01.7110514Z ------------------------------------------
2019-07-20T01:02:01.7110550Z 
2019-07-20T01:02:01.7110787Z ------------------------------------------
2019-07-20T01:02:01.7110835Z stderr:
2019-07-20T01:02:01.7110835Z stderr:
2019-07-20T01:02:01.7111054Z ------------------------------------------
2019-07-20T01:02:01.7111310Z error[E0277]: `&Error` doesn't implement `std::fmt::Debug`
2019-07-20T01:02:01.7111615Z    |
2019-07-20T01:02:01.7111658Z LL |      Error //~ ERROR
2019-07-20T01:02:01.7111658Z LL |      Error //~ ERROR
2019-07-20T01:02:01.7111960Z    |      ^^^^^ `&Error` cannot be formatted using `{:?}` because it doesn't implement `std::fmt::Debug`
2019-07-20T01:02:01.7112137Z    |
2019-07-20T01:02:01.7112200Z    = help: the trait `std::fmt::Debug` is not implemented for `&Error`
2019-07-20T01:02:01.7112257Z    = note: required for the cast to the object type `dyn std::fmt::Debug`
2019-07-20T01:02:01.7112333Z error: aborting due to previous error
2019-07-20T01:02:01.7112376Z 
2019-07-20T01:02:01.7112806Z For more information about this error, try `rustc --explain E0277`.
2019-07-20T01:02:01.7112832Z 
2019-07-20T01:02:01.7112832Z 
2019-07-20T01:02:01.7112991Z ------------------------------------------
2019-07-20T01:02:01.7113028Z 
2019-07-20T01:02:01.7113048Z 
2019-07-20T01:02:01.7113222Z ---- [ui] ui/derives/derives-span-Debug-struct.rs stdout ----
2019-07-20T01:02:01.7113259Z diff of stderr:
2019-07-20T01:02:01.7113280Z 
2019-07-20T01:02:01.7113462Z - error[E0277]: `Error` doesn't implement `std::fmt::Debug`
2019-07-20T01:02:01.7113640Z + error[E0277]: `&Error` doesn't implement `std::fmt::Debug`
2019-07-20T01:02:01.7113934Z 3    |
2019-07-20T01:02:01.7113967Z 4 LL |     x: Error
2019-07-20T01:02:01.7113988Z 
2019-07-20T01:02:01.7113988Z 
2019-07-20T01:02:01.7114188Z -    |     ^^^^^^^^ `Error` cannot be formatted using `{:?}`
2019-07-20T01:02:01.7114404Z +    |     ^^^^^^^^ `&Error` cannot be formatted using `{:?}` because it doesn't implement `std::fmt::Debug`
2019-07-20T01:02:01.7114443Z 6    |
2019-07-20T01:02:01.7114620Z -    = help: the trait `std::fmt::Debug` is not implemented for `Error`
2019-07-20T01:02:01.7114825Z -    = note: add `#[derive(Debug)]` or manually implement `std::fmt::Debug`
2019-07-20T01:02:01.7115024Z -    = note: required because of the requirements on the impl of `std::fmt::Debug` for `&Error`
2019-07-20T01:02:01.7115067Z +    = help: the trait `std::fmt::Debug` is not implemented for `&Error`
2019-07-20T01:02:01.7115121Z 10    = note: required for the cast to the object type `dyn std::fmt::Debug`
2019-07-20T01:02:01.7115199Z 12 error: aborting due to previous error
2019-07-20T01:02:01.7115232Z 
2019-07-20T01:02:01.7115251Z 
2019-07-20T01:02:01.7115284Z The actual stderr differed from the expected stderr.
2019-07-20T01:02:01.7115284Z The actual stderr differed from the expected stderr.
2019-07-20T01:02:01.7115527Z Actual stderr saved to /checkout/obj/build/x86_64-unknown-linux-gnu/test/ui/derives/derives-span-Debug-struct/derives-span-Debug-struct.stderr
2019-07-20T01:02:01.7115724Z To update references, rerun the tests and pass the `--bless` flag
2019-07-20T01:02:01.7115927Z To only update this specific test, also pass `--test-args derives/derives-span-Debug-struct.rs`
2019-07-20T01:02:01.7115994Z error: 1 errors occurred comparing output.
2019-07-20T01:02:01.7116027Z status: exit code: 1
2019-07-20T01:02:01.7116027Z status: exit code: 1
2019-07-20T01:02:01.7116582Z command: "/checkout/obj/build/x86_64-unknown-linux-gnu/stage2/bin/rustc" "/checkout/src/test/ui/derives/derives-span-Debug-struct.rs" "-Zthreads=1" "--target=x86_64-unknown-linux-gnu" "--error-format" "json" "-Zui-testing" "-C" "prefer-dynamic" "--out-dir" "/checkout/obj/build/x86_64-unknown-linux-gnu/test/ui/derives/derives-span-Debug-struct" "-Crpath" "-O" "-Cdebuginfo=0" "-Zunstable-options" "-Lnative=/checkout/obj/build/x86_64-unknown-linux-gnu/native/rust-test-helpers" "-L" "/checkout/obj/build/x86_64-unknown-linux-gnu/test/ui/derives/derives-span-Debug-struct/auxiliary" "-A" "unused"
2019-07-20T01:02:01.7116827Z ------------------------------------------
2019-07-20T01:02:01.7116864Z 
2019-07-20T01:02:01.7117026Z ------------------------------------------
2019-07-20T01:02:01.7117060Z stderr:
2019-07-20T01:02:01.7117060Z stderr:
2019-07-20T01:02:01.7117416Z ------------------------------------------
2019-07-20T01:02:01.7117643Z error[E0277]: `&Error` doesn't implement `std::fmt::Debug`
2019-07-20T01:02:01.7118083Z    |
2019-07-20T01:02:01.7118083Z    |
2019-07-20T01:02:01.7118118Z LL |     x: Error //~ ERROR
2019-07-20T01:02:01.7118352Z    |     ^^^^^^^^ `&Error` cannot be formatted using `{:?}` because it doesn't implement `std::fmt::Debug`
2019-07-20T01:02:01.7118484Z    |
2019-07-20T01:02:01.7118524Z    = help: the trait `std::fmt::Debug` is not implemented for `&Error`
2019-07-20T01:02:01.7118567Z    = note: required for the cast to the object type `dyn std::fmt::Debug`
2019-07-20T01:02:01.7118638Z error: aborting due to previous error
2019-07-20T01:02:01.7118661Z 
2019-07-20T01:02:01.7118883Z For more information about this error, try `rustc --explain E0277`.
2019-07-20T01:02:01.7118912Z 
2019-07-20T01:02:01.7118912Z 
2019-07-20T01:02:01.7119463Z ------------------------------------------
2019-07-20T01:02:01.7119505Z 
2019-07-20T01:02:01.7119532Z 
2019-07-20T01:02:01.7119773Z ---- [ui] ui/derives/derives-span-Debug-tuple-struct.rs stdout ----
2019-07-20T01:02:01.7119835Z diff of stderr:
2019-07-20T01:02:01.7119863Z 
2019-07-20T01:02:01.7120100Z - error[E0277]: `Error` doesn't implement `std::fmt::Debug`
2019-07-20T01:02:01.7120354Z + error[E0277]: `&Error` doesn't implement `std::fmt::Debug`
2019-07-20T01:02:01.7120755Z 3    |
2019-07-20T01:02:01.7120797Z 4 LL |     Error
2019-07-20T01:02:01.7120836Z 
2019-07-20T01:02:01.7120836Z 
2019-07-20T01:02:01.7121098Z -    |     ^^^^^ `Error` cannot be formatted using `{:?}`
2019-07-20T01:02:01.7121379Z +    |     ^^^^^ `&Error` cannot be formatted using `{:?}` because it doesn't implement `std::fmt::Debug`
2019-07-20T01:02:01.7121443Z 6    |
2019-07-20T01:02:01.7121688Z -    = help: the trait `std::fmt::Debug` is not implemented for `Error`
2019-07-20T01:02:01.7121943Z -    = note: add `#[derive(Debug)]` or manually implement `std::fmt::Debug`
2019-07-20T01:02:01.7122233Z -    = note: required because of the requirements on the impl of `std::fmt::Debug` for `&Error`
2019-07-20T01:02:01.7122293Z +    = help: the trait `std::fmt::Debug` is not implemented for `&Error`
2019-07-20T01:02:01.7122348Z 10    = note: required for the cast to the object type `dyn std::fmt::Debug`
2019-07-20T01:02:01.7122468Z 12 error: aborting due to previous error
2019-07-20T01:02:01.7122499Z 
2019-07-20T01:02:01.7122525Z 
2019-07-20T01:02:01.7122571Z The actual stderr differed from the expected stderr.
2019-07-20T01:02:01.7122571Z The actual stderr differed from the expected stderr.
2019-07-20T01:02:01.7123220Z Actual stderr saved to /checkout/obj/build/x86_64-unknown-linux-gnu/test/ui/derives/derives-span-Debug-tuple-struct/derives-span-Debug-tuple-struct.stderr
2019-07-20T01:02:01.7123407Z To update references, rerun the tests and pass the `--bless` flag
2019-07-20T01:02:01.7123622Z To only update this specific test, also pass `--test-args derives/derives-span-Debug-tuple-struct.rs`
2019-07-20T01:02:01.7123683Z error: 1 errors occurred comparing output.
2019-07-20T01:02:01.7123715Z status: exit code: 1
2019-07-20T01:02:01.7123715Z status: exit code: 1
2019-07-20T01:02:01.7124288Z command: "/checkout/obj/build/x86_64-unknown-linux-gnu/stage2/bin/rustc" "/checkout/src/test/ui/derives/derives-span-Debug-tuple-struct.rs" "-Zthreads=1" "--target=x86_64-unknown-linux-gnu" "--error-format" "json" "-Zui-testing" "-C" "prefer-dynamic" "--out-dir" "/checkout/obj/build/x86_64-unknown-linux-gnu/test/ui/derives/derives-span-Debug-tuple-struct" "-Crpath" "-O" "-Cdebuginfo=0" "-Zunstable-options" "-Lnative=/checkout/obj/build/x86_64-unknown-linux-gnu/native/rust-test-helpers" "-L" "/checkout/obj/build/x86_64-unknown-linux-gnu/test/ui/derives/derives-span-Debug-tuple-struct/auxiliary" "-A" "unused"
2019-07-20T01:02:01.7124538Z ------------------------------------------
2019-07-20T01:02:01.7124563Z 
2019-07-20T01:02:01.7124723Z ------------------------------------------
2019-07-20T01:02:01.7124769Z stderr:
2019-07-20T01:02:01.7124769Z stderr:
2019-07-20T01:02:01.7124929Z ------------------------------------------
2019-07-20T01:02:01.7125104Z error[E0277]: `&Error` doesn't implement `std::fmt::Debug`
2019-07-20T01:02:01.7125350Z    |
2019-07-20T01:02:01.7125382Z LL |     Error //~ ERROR
2019-07-20T01:02:01.7125382Z LL |     Error //~ ERROR
2019-07-20T01:02:01.7125708Z    |     ^^^^^ `&Error` cannot be formatted using `{:?}` because it doesn't implement `std::fmt::Debug`
2019-07-20T01:02:01.7125749Z    |
2019-07-20T01:02:01.7125786Z    = help: the trait `std::fmt::Debug` is not implemented for `&Error`
2019-07-20T01:02:01.7125831Z    = note: required for the cast to the object type `dyn std::fmt::Debug`
2019-07-20T01:02:01.7125892Z error: aborting due to previous error
2019-07-20T01:02:01.7125915Z 
2019-07-20T01:02:01.7126176Z For more information about this error, try `rustc --explain E0277`.
2019-07-20T01:02:01.7126204Z 
2019-07-20T01:02:01.7126204Z 
2019-07-20T01:02:01.7126380Z ------------------------------------------
2019-07-20T01:02:01.7126406Z 
2019-07-20T01:02:01.7126434Z 
2019-07-20T01:02:01.7126623Z ---- [ui] ui/derives/derives-span-Default-struct.rs stdout ----
2019-07-20T01:02:01.7126663Z diff of stderr:
2019-07-20T01:02:01.7126685Z 
2019-07-20T01:02:01.7126894Z - error[E0277]: the trait bound `Error: std::default::Default` is not satisfied
2019-07-20T01:02:01.7127018Z + error[E0277]: the trait bound `Error: core::closure::Closure` is not satisfied
2019-07-20T01:02:01.7127288Z 3    |
2019-07-20T01:02:01.7127322Z 4 LL |     x: Error
2019-07-20T01:02:01.7127345Z 
2019-07-20T01:02:01.7127345Z 
2019-07-20T01:02:01.7127551Z -    |     ^^^^^^^^ the trait `std::default::Default` is not implemented for `Error`
2019-07-20T01:02:01.7127612Z +    |     ^^^^^^^^ the trait `core::closure::Closure` is not implemented for `Error`
2019-07-20T01:02:01.7127649Z 6    |
2019-07-20T01:02:01.7127689Z +    = note: required because of the requirements on the impl of `std::default::Default` for `Error`
2019-07-20T01:02:01.7127743Z 7    = note: required by `std::default::Default::default`
2019-07-20T01:02:01.7127811Z 9 error: aborting due to previous error
2019-07-20T01:02:01.7127843Z 
2019-07-20T01:02:01.7127863Z 
2019-07-20T01:02:01.7127898Z The actual stderr differed from the expected stderr.
2019-07-20T01:02:01.7127898Z The actual stderr differed from the expected stderr.
2019-07-20T01:02:01.7128172Z Actual stderr saved to /checkout/obj/build/x86_64-unknown-linux-gnu/test/ui/derives/derives-span-Default-struct/derives-span-Default-struct.stderr
2019-07-20T01:02:01.7128383Z To update references, rerun the tests and pass the `--bless` flag
2019-07-20T01:02:01.7128601Z To only update this specific test, also pass `--test-args derives/derives-span-Default-struct.rs`
2019-07-20T01:02:01.7128669Z error: 1 errors occurred comparing output.
2019-07-20T01:02:01.7128705Z status: exit code: 1
2019-07-20T01:02:01.7128705Z status: exit code: 1
2019-07-20T01:02:01.7130000Z command: "/checkout/obj/build/x86_64-unknown-linux-gnu/stage2/bin/rustc" "/checkout/src/test/ui/derives/derives-span-Default-struct.rs" "-Zthreads=1" "--target=x86_64-unknown-linux-gnu" "--error-format" "json" "-Zui-testing" "-C" "prefer-dynamic" "--out-dir" "/checkout/obj/build/x86_64-unknown-linux-gnu/test/ui/derives/derives-span-Default-struct" "-Crpath" "-O" "-Cdebuginfo=0" "-Zunstable-options" "-Lnative=/checkout/obj/build/x86_64-unknown-linux-gnu/native/rust-test-helpers" "-L" "/checkout/obj/build/x86_64-unknown-linux-gnu/test/ui/derives/derives-span-Default-struct/auxiliary" "-A" "unused"
2019-07-20T01:02:01.7130363Z ------------------------------------------
2019-07-20T01:02:01.7130411Z 
2019-07-20T01:02:01.7130635Z ------------------------------------------
2019-07-20T01:02:01.7130682Z stderr:
2019-07-20T01:02:01.7130682Z stderr:
2019-07-20T01:02:01.7130914Z ------------------------------------------
2019-07-20T01:02:01.7130971Z error[E0277]: the trait bound `Error: core::closure::Closure` is not satisfied
2019-07-20T01:02:01.7131299Z    |
2019-07-20T01:02:01.7131299Z    |
2019-07-20T01:02:01.7131343Z LL |     x: Error //~ ERROR
2019-07-20T01:02:01.7131396Z    |     ^^^^^^^^ the trait `core::closure::Closure` is not implemented for `Error`
2019-07-20T01:02:01.7131444Z    |
2019-07-20T01:02:01.7131512Z    = note: required because of the requirements on the impl of `std::default::Default` for `Error`
2019-07-20T01:02:01.7131672Z    = note: required by `std::default::Default::default`
2019-07-20T01:02:01.7131761Z error: aborting due to previous error
2019-07-20T01:02:01.7131793Z 
2019-07-20T01:02:01.7132073Z For more information about this error, try `rustc --explain E0277`.
2019-07-20T01:02:01.7132109Z 
2019-07-20T01:02:01.7132109Z 
2019-07-20T01:02:01.7132347Z ------------------------------------------
2019-07-20T01:02:01.7132379Z 
2019-07-20T01:02:01.7132406Z 
2019-07-20T01:02:01.7132819Z ---- [ui] ui/derives/derives-span-Default-tuple-struct.rs stdout ----
2019-07-20T01:02:01.7132867Z diff of stderr:
2019-07-20T01:02:01.7132890Z 
2019-07-20T01:02:01.7133870Z - error[E0277]: the trait bound `Error: std::default::Default` is not satisfied
2019-07-20T01:02:01.7133921Z + error[E0277]: the trait bound `Error: core::closure::Closure` is not satisfied
2019-07-20T01:02:01.7134167Z 3    |
2019-07-20T01:02:01.7134290Z 4 LL |     Error
2019-07-20T01:02:01.7134320Z 
2019-07-20T01:02:01.7134320Z 
2019-07-20T01:02:01.7134560Z -    |     ^^^^^ the trait `std::default::Default` is not implemented for `Error`
2019-07-20T01:02:01.7134607Z +    |     ^^^^^ the trait `core::closure::Closure` is not implemented for `Error`
2019-07-20T01:02:01.7134643Z 6    |
2019-07-20T01:02:01.7134697Z +    = note: required because of the requirements on the impl of `std::default::Default` for `Error`
2019-07-20T01:02:01.7134740Z 7    = note: required by `std::default::Default::default`
2019-07-20T01:02:01.7134824Z 9 error: aborting due to previous error
2019-07-20T01:02:01.7134847Z 
2019-07-20T01:02:01.7134867Z 
2019-07-20T01:02:01.7134903Z The actual stderr differed from the expected stderr.
2019-07-20T01:02:01.7134903Z The actual stderr differed from the expected stderr.
2019-07-20T01:02:01.7135183Z Actual stderr saved to /checkout/obj/build/x86_64-unknown-linux-gnu/test/ui/derives/derives-span-Default-tuple-struct/derives-span-Default-tuple-struct.stderr
2019-07-20T01:02:01.7135398Z To update references, rerun the tests and pass the `--bless` flag
2019-07-20T01:02:01.7135632Z To only update this specific test, also pass `--test-args derives/derives-span-Default-tuple-struct.rs`
2019-07-20T01:02:01.7135697Z error: 1 errors occurred comparing output.
2019-07-20T01:02:01.7135732Z status: exit code: 1
2019-07-20T01:02:01.7135732Z status: exit code: 1
2019-07-20T01:02:01.7136337Z command: "/checkout/obj/build/x86_64-unknown-linux-gnu/stage2/bin/rustc" "/checkout/src/test/ui/derives/derives-span-Default-tuple-struct.rs" "-Zthreads=1" "--target=x86_64-unknown-linux-gnu" "--error-format" "json" "-Zui-testing" "-C" "prefer-dynamic" "--out-dir" "/checkout/obj/build/x86_64-unknown-linux-gnu/test/ui/derives/derives-span-Default-tuple-struct" "-Crpath" "-O" "-Cdebuginfo=0" "-Zunstable-options" "-Lnative=/checkout/obj/build/x86_64-unknown-linux-gnu/native/rust-test-helpers" "-L" "/checkout/obj/build/x86_64-unknown-linux-gnu/test/ui/derives/derives-span-Default-tuple-struct/auxiliary" "-A" "unused"
2019-07-20T01:02:01.7136607Z ------------------------------------------
2019-07-20T01:02:01.7136635Z 
2019-07-20T01:02:01.7136807Z ------------------------------------------
2019-07-20T01:02:01.7136851Z stderr:
2019-07-20T01:02:01.7136851Z stderr:
2019-07-20T01:02:01.7137021Z ------------------------------------------
2019-07-20T01:02:01.7137064Z error[E0277]: the trait bound `Error: core::closure::Closure` is not satisfied
2019-07-20T01:02:01.7137317Z    |
2019-07-20T01:02:01.7137351Z LL |     Error //~ ERROR
2019-07-20T01:02:01.7137351Z LL |     Error //~ ERROR
2019-07-20T01:02:01.7137405Z    |     ^^^^^ the trait `core::closure::Closure` is not implemented for `Error`
2019-07-20T01:02:01.7137441Z    |
2019-07-20T01:02:01.7137481Z    = note: required because of the requirements on the impl of `std::default::Default` for `Error`
2019-07-20T01:02:01.7137537Z    = note: required by `std::default::Default::default`
2019-07-20T01:02:01.7137596Z error: aborting due to previous error
2019-07-20T01:02:01.7137706Z 
2019-07-20T01:02:01.7137926Z For more information about this error, try `rustc --explain E0277`.
2019-07-20T01:02:01.7137965Z 
2019-07-20T01:02:01.7137965Z 
2019-07-20T01:02:01.7138135Z ------------------------------------------
2019-07-20T01:02:01.7138161Z 
2019-07-20T01:02:01.7138181Z 
2019-07-20T01:02:01.7138381Z ---- [ui] ui/derives/derives-span-Eq-enum-struct-variant.rs stdout ----
2019-07-20T01:02:01.7138421Z diff of stderr:
2019-07-20T01:02:01.7138442Z 
2019-07-20T01:02:01.7138636Z - error[E0277]: the trait bound `Error: std::cmp::Eq` is not satisfied
2019-07-20T01:02:01.7138695Z + error[E0277]: the trait bound `Error: core::closure::Closure` is not satisfied
2019-07-20T01:02:01.7139290Z 3    |
2019-07-20T01:02:01.7139351Z 4 LL |      x: Error
2019-07-20T01:02:01.7139379Z 
2019-07-20T01:02:01.7139379Z 
2019-07-20T01:02:01.7139668Z -    |      ^^^^^^^^ the trait `std::cmp::Eq` is not implemented for `Error`
2019-07-20T01:02:01.7139844Z +    |      ^^^^^^^^ the trait `core::closure::Closure` is not implemented for `Error`
2019-07-20T01:02:01.7139902Z 6    |
2019-07-20T01:02:01.7139954Z +    = note: required because of the requirements on the impl of `std::cmp::Eq` for `Error`
2019-07-20T01:02:01.7140007Z 7    = note: required by `std::cmp::AssertParamIsEq`
2019-07-20T01:02:01.7140105Z 9 error: aborting due to previous error
2019-07-20T01:02:01.7140134Z 
2019-07-20T01:02:01.7140160Z 
2019-07-20T01:02:01.7140213Z The actual stderr differed from the expected stderr.
2019-07-20T01:02:01.7140213Z The actual stderr differed from the expected stderr.
2019-07-20T01:02:01.7140588Z Actual stderr saved to /checkout/obj/build/x86_64-unknown-linux-gnu/test/ui/derives/derives-span-Eq-enum-struct-variant/derives-span-Eq-enum-struct-variant.stderr
2019-07-20T01:02:01.7140851Z To update references, rerun the tests and pass the `--bless` flag
2019-07-20T01:02:01.7141179Z To only update this specific test, also pass `--test-args derives/derives-span-Eq-enum-struct-variant.rs`
2019-07-20T01:02:01.7141288Z error: 1 errors occurred comparing output.
2019-07-20T01:02:01.7141357Z status: exit code: 1
2019-07-20T01:02:01.7141357Z status: exit code: 1
2019-07-20T01:02:01.7142162Z command: "/checkout/obj/build/x86_64-unknown-linux-gnu/stage2/bin/rustc" "/checkout/src/test/ui/derives/derives-span-Eq-enum-struct-variant.rs" "-Zthreads=1" "--target=x86_64-unknown-linux-gnu" "--error-format" "json" "-Zui-testing" "-C" "prefer-dynamic" "--out-dir" "/checkout/obj/build/x86_64-unknown-linux-gnu/test/ui/derives/derives-span-Eq-enum-struct-variant" "-Crpath" "-O" "-Cdebuginfo=0" "-Zunstable-options" "-Lnative=/checkout/obj/build/x86_64-unknown-linux-gnu/native/rust-test-helpers" "-L" "/checkout/obj/build/x86_64-unknown-linux-gnu/test/ui/derives/derives-span-Eq-enum-struct-variant/auxiliary" "-A" "unused"
2019-07-20T01:02:01.7142670Z ------------------------------------------
2019-07-20T01:02:01.7142697Z 
2019-07-20T01:02:01.7143057Z ------------------------------------------
2019-07-20T01:02:01.7143102Z stderr:
2019-07-20T01:02:01.7143102Z stderr:
2019-07-20T01:02:01.7143279Z ------------------------------------------
2019-07-20T01:02:01.7143330Z error[E0277]: the trait bound `Error: core::closure::Closure` is not satisfied
2019-07-20T01:02:01.7143577Z    |
2019-07-20T01:02:01.7143577Z    |
2019-07-20T01:02:01.7143620Z LL |      x: Error //~ ERROR
2019-07-20T01:02:01.7143662Z    |      ^^^^^^^^ the trait `core::closure::Closure` is not implemented for `Error`
2019-07-20T01:02:01.7143698Z    |
2019-07-20T01:02:01.7143746Z    = note: required because of the requirements on the impl of `std::cmp::Eq` for `Error`
2019-07-20T01:02:01.7143786Z    = note: required by `std::cmp::AssertParamIsEq`
2019-07-20T01:02:01.7143844Z error: aborting due to previous error
2019-07-20T01:02:01.7143880Z 
2019-07-20T01:02:01.7144074Z For more information about this error, try `rustc --explain E0277`.
2019-07-20T01:02:01.7144101Z 
2019-07-20T01:02:01.7144101Z 
2019-07-20T01:02:01.7144369Z ------------------------------------------
2019-07-20T01:02:01.7144424Z 
2019-07-20T01:02:01.7144445Z 
2019-07-20T01:02:01.7144630Z ---- [ui] ui/derives/derives-span-Eq-enum.rs stdout ----
2019-07-20T01:02:01.7144669Z diff of stderr:
2019-07-20T01:02:01.7144702Z 
2019-07-20T01:02:01.7144898Z - error[E0277]: the trait bound `Error: std::cmp::Eq` is not satisfied
2019-07-20T01:02:01.7144945Z + error[E0277]: the trait bound `Error: core::closure::Closure` is not satisfied
2019-07-20T01:02:01.7145165Z 3    |
2019-07-20T01:02:01.7145198Z 4 LL |      Error
2019-07-20T01:02:01.7145220Z 
2019-07-20T01:02:01.7145220Z 
2019-07-20T01:02:01.7145427Z -    |      ^^^^^ the trait `std::cmp::Eq` is not implemented for `Error`
2019-07-20T01:02:01.7145473Z +    |      ^^^^^ the trait `core::closure::Closure` is not implemented for `Error`
2019-07-20T01:02:01.7145510Z 6    |
2019-07-20T01:02:01.7145557Z +    = note: required because of the requirements on the impl of `std::cmp::Eq` for `Error`
2019-07-20T01:02:01.7145668Z 7    = note: required by `std::cmp::AssertParamIsEq`
2019-07-20T01:02:01.7145742Z 9 error: aborting due to previous error
2019-07-20T01:02:01.7145770Z 
2019-07-20T01:02:01.7145790Z 
2019-07-20T01:02:01.7145825Z The actual stderr differed from the expected stderr.
2019-07-20T01:02:01.7145825Z The actual stderr differed from the expected stderr.
2019-07-20T01:02:01.7146102Z Actual stderr saved to /checkout/obj/build/x86_64-unknown-linux-gnu/test/ui/derives/derives-span-Eq-enum/derives-span-Eq-enum.stderr
2019-07-20T01:02:01.7146313Z To update references, rerun the tests and pass the `--bless` flag
2019-07-20T01:02:01.7146526Z To only update this specific test, also pass `--test-args derives/derives-span-Eq-enum.rs`
2019-07-20T01:02:01.7146597Z error: 1 errors occurred comparing output.
2019-07-20T01:02:01.7146631Z status: exit code: 1
2019-07-20T01:02:01.7146631Z status: exit code: 1
2019-07-20T01:02:01.7147210Z command: "/checkout/obj/build/x86_64-unknown-linux-gnu/stage2/bin/rustc" "/checkout/src/test/ui/derives/derives-span-Eq-enum.rs" "-Zthreads=1" "--target=x86_64-unknown-linux-gnu" "--error-format" "json" "-Zui-testing" "-C" "prefer-dynamic" "--out-dir" "/checkout/obj/build/x86_64-unknown-linux-gnu/test/ui/derives/derives-span-Eq-enum" "-Crpath" "-O" "-Cdebuginfo=0" "-Zunstable-options" "-Lnative=/checkout/obj/build/x86_64-unknown-linux-gnu/native/rust-test-helpers" "-L" "/checkout/obj/build/x86_64-unknown-linux-gnu/test/ui/derives/derives-span-Eq-enum/auxiliary" "-A" "unused"
2019-07-20T01:02:01.7147481Z ------------------------------------------
2019-07-20T01:02:01.7147526Z 
2019-07-20T01:02:01.7147699Z ------------------------------------------
2019-07-20T01:02:01.7147736Z stderr:
2019-07-20T01:02:01.7147736Z stderr:
2019-07-20T01:02:01.7147917Z ------------------------------------------
2019-07-20T01:02:01.7147961Z error[E0277]: the trait bound `Error: core::closure::Closure` is not satisfied
2019-07-20T01:02:01.7148202Z    |
2019-07-20T01:02:01.7148243Z LL |      Error //~ ERROR
2019-07-20T01:02:01.7148243Z LL |      Error //~ ERROR
2019-07-20T01:02:01.7148288Z    |      ^^^^^ the trait `core::closure::Closure` is not implemented for `Error`
2019-07-20T01:02:01.7148330Z    |
2019-07-20T01:02:01.7148369Z    = note: required because of the requirements on the impl of `std::cmp::Eq` for `Error`
2019-07-20T01:02:01.7148410Z    = note: required by `std::cmp::AssertParamIsEq`
2019-07-20T01:02:01.7148472Z error: aborting due to previous error
2019-07-20T01:02:01.7148495Z 
2019-07-20T01:02:01.7148694Z For more information about this error, try `rustc --explain E0277`.
2019-07-20T01:02:01.7148721Z 
2019-07-20T01:02:01.7148721Z 
2019-07-20T01:02:01.7148897Z ------------------------------------------
2019-07-20T01:02:01.7148923Z 
2019-07-20T01:02:01.7148943Z 
2019-07-20T01:02:01.7149518Z ---- [ui] ui/derives/derives-span-Eq-struct.rs stdout ----
2019-07-20T01:02:01.7149586Z diff of stderr:
2019-07-20T01:02:01.7149615Z 
2019-07-20T01:02:01.7149863Z - error[E0277]: the trait bound `Error: std::cmp::Eq` is not satisfied
2019-07-20T01:02:01.7150034Z + error[E0277]: the trait bound `Error: core::closure::Closure` is not satisfied
2019-07-20T01:02:01.7150359Z 3    |
2019-07-20T01:02:01.7150403Z 4 LL |     x: Error
2019-07-20T01:02:01.7150446Z 
2019-07-20T01:02:01.7150446Z 
2019-07-20T01:02:01.7150698Z -    |     ^^^^^^^^ the trait `std::cmp::Eq` is not implemented for `Error`
2019-07-20T01:02:01.7150758Z +    |     ^^^^^^^^ the trait `core::closure::Closure` is not implemented for `Error`
2019-07-20T01:02:01.7150806Z 6    |
2019-07-20T01:02:01.7150869Z +    = note: required because of the requirements on the impl of `std::cmp::Eq` for `Error`
2019-07-20T01:02:01.7150922Z 7    = note: required by `std::cmp::AssertParamIsEq`
2019-07-20T01:02:01.7151029Z 9 error: aborting due to previous error
2019-07-20T01:02:01.7151059Z 
2019-07-20T01:02:01.7151085Z 
2019-07-20T01:02:01.7151131Z The actual stderr differed from the expected stderr.
2019-07-20T01:02:01.7151131Z The actual stderr differed from the expected stderr.
2019-07-20T01:02:01.7151549Z Actual stderr saved to /checkout/obj/build/x86_64-unknown-linux-gnu/test/ui/derives/derives-span-Eq-struct/derives-span-Eq-struct.stderr
2019-07-20T01:02:01.7151842Z To update references, rerun the tests and pass the `--bless` flag
2019-07-20T01:02:01.7152118Z To only update this specific test, also pass `--test-args derives/derives-span-Eq-struct.rs`
2019-07-20T01:02:01.7152212Z error: 1 errors occurred comparing output.
2019-07-20T01:02:01.7152258Z status: exit code: 1
2019-07-20T01:02:01.7152258Z status: exit code: 1
2019-07-20T01:02:01.7153276Z command: "/checkout/obj/build/x86_64-unknown-linux-gnu/stage2/bin/rustc" "/checkout/src/test/ui/derives/derives-span-Eq-struct.rs" "-Zthreads=1" "--target=x86_64-unknown-linux-gnu" "--error-format" "json" "-Zui-testing" "-C" "prefer-dynamic" "--out-dir" "/checkout/obj/build/x86_64-unknown-linux-gnu/test/ui/derives/derives-span-Eq-struct" "-Crpath" "-O" "-Cdebuginfo=0" "-Zunstable-options" "-Lnative=/checkout/obj/build/x86_64-unknown-linux-gnu/native/rust-test-helpers" "-L" "/checkout/obj/build/x86_64-unknown-linux-gnu/test/ui/derives/derives-span-Eq-struct/auxiliary" "-A" "unused"
2019-07-20T01:02:01.7153690Z ------------------------------------------
2019-07-20T01:02:01.7153715Z 
2019-07-20T01:02:01.7153876Z ------------------------------------------
2019-07-20T01:02:01.7153926Z stderr:
2019-07-20T01:02:01.7153926Z stderr:
2019-07-20T01:02:01.7154086Z ------------------------------------------
2019-07-20T01:02:01.7154128Z error[E0277]: the trait bound `Error: core::closure::Closure` is not satisfied
2019-07-20T01:02:01.7154364Z    |
2019-07-20T01:02:01.7154364Z    |
2019-07-20T01:02:01.7154397Z LL |     x: Error //~ ERROR
2019-07-20T01:02:01.7154434Z    |     ^^^^^^^^ the trait `core::closure::Closure` is not implemented for `Error`
2019-07-20T01:02:01.7154476Z    |
2019-07-20T01:02:01.7154513Z    = note: required because of the requirements on the impl of `std::cmp::Eq` for `Error`
2019-07-20T01:02:01.7154551Z    = note: required by `std::cmp::AssertParamIsEq`
2019-07-20T01:02:01.7154626Z error: aborting due to previous error
2019-07-20T01:02:01.7154648Z 
2019-07-20T01:02:01.7154836Z For more information about this error, try `rustc --explain E0277`.
2019-07-20T01:02:01.7154869Z 
2019-07-20T01:02:01.7154869Z 
2019-07-20T01:02:01.7155030Z ------------------------------------------
2019-07-20T01:02:01.7155054Z 
---
2019-07-20T01:02:01.7286409Z ---- [ui] ui/mismatched_types/binops.rs stdout ----
2019-07-20T01:02:01.7286450Z diff of stderr:
2019-07-20T01:02:01.7286483Z 
2019-07-20T01:02:01.7286515Z 30    |
2019-07-20T01:02:01.7286553Z 31    = help: the trait `std::ops::Div<&str>` is not implemented for `{integer}`
2019-07-20T01:02:01.7286601Z 32 
2019-07-20T01:02:01.7286797Z - error[E0277]: can't compare `{integer}` with `std::string::String`
2019-07-20T01:02:01.7286844Z + error[E0277]: the trait bound `{integer}: core::closure::Closure` is not satisfied
2019-07-20T01:02:01.7287062Z 35    |
2019-07-20T01:02:01.7287096Z 36 LL |     5 < String::new();
2019-07-20T01:02:01.7287118Z 
2019-07-20T01:02:01.7287118Z 
2019-07-20T01:02:01.7287357Z -    |       ^ no implementation for `{integer} < std::string::String` and `{integer} > std::string::String`
2019-07-20T01:02:01.7287707Z +    |       ^ the trait `core::closure::Closure` is not implemented for `{integer}`
2019-07-20T01:02:01.7287744Z 38    |
2019-07-20T01:02:01.7288010Z -    = help: the trait `std::cmp::PartialOrd<std::string::String>` is not implemented for `{integer}`
2019-07-20T01:02:01.7288068Z +    = note: required because of the requirements on the impl of `std::cmp::PartialEq<std::string::String>` for `{integer}`
2019-07-20T01:02:01.7288109Z 40 
2019-07-20T01:02:01.7288536Z - error[E0277]: can't compare `{integer}` with `std::result::Result<{integer}, _>`
2019-07-20T01:02:01.7288587Z + error[E0277]: the trait bound `std::string::String: core::closure::Closure` is not satisfied
2019-07-20T01:02:01.7289806Z +   --> $DIR/binops.rs:6:7
2019-07-20T01:02:01.7289932Z + LL |     5 < String::new();
2019-07-20T01:02:01.7289932Z + LL |     5 < String::new();
2019-07-20T01:02:01.7289985Z +    |       ^ the trait `core::closure::Closure` is not implemented for `std::string::String`
2019-07-20T01:02:01.7290175Z +    |
2019-07-20T01:02:01.7290253Z +    = note: required because of the requirements on the impl of `std::cmp::PartialEq<std::string::String>` for `{integer}`
2019-07-20T01:02:01.7290303Z + 
2019-07-20T01:02:01.7290353Z + error[E0277]: the trait bound `{integer}: core::closure::Closure` is not satisfied
2019-07-20T01:02:01.7290674Z 43    |
2019-07-20T01:02:01.7290674Z 43    |
2019-07-20T01:02:01.7290717Z 44 LL |     6 == Ok(1);
2019-07-20T01:02:01.7290747Z 
2019-07-20T01:02:01.7291026Z -    |       ^^ no implementation for `{integer} == std::result::Result<{integer}, _>`
2019-07-20T01:02:01.7291087Z +    |       ^^ the trait `core::closure::Closure` is not implemented for `{integer}`
2019-07-20T01:02:01.7291137Z 46    |
2019-07-20T01:02:01.7292153Z -    = help: the trait `std::cmp::PartialEq<std::result::Result<{integer}, _>>` is not implemented for `{integer}`
2019-07-20T01:02:01.7292255Z +    = note: required because of the requirements on the impl of `std::cmp::PartialEq<std::result::Result<{integer}, _>>` for `{integer}`
2019-07-20T01:02:01.7317287Z - error: aborting due to 6 previous errors
2019-07-20T01:02:01.7317287Z - error: aborting due to 6 previous errors
2019-07-20T01:02:01.7317360Z + error[E0277]: the trait bound `std::result::Result<{integer}, _>: core::closure::Closure` is not satisfied
2019-07-20T01:02:01.7317625Z +   --> $DIR/binops.rs:7:7
2019-07-20T01:02:01.7317682Z +    |
2019-07-20T01:02:01.7317716Z + LL |     6 == Ok(1);
2019-07-20T01:02:01.7317758Z +    |       ^^ the trait `core::closure::Closure` is not implemented for `std::result::Result<{integer}, _>`
2019-07-20T01:02:01.7317806Z +    |
2019-07-20T01:02:01.7317849Z +    = note: required because of the requirements on the impl of `std::cmp::PartialEq<std::result::Result<{integer}, _>>` for `{integer}`
2019-07-20T01:02:01.7317935Z + error: aborting due to 8 previous errors
2019-07-20T01:02:01.7317968Z 50 
2019-07-20T01:02:01.7318169Z 51 For more information about this error, try `rustc --explain E0277`.
2019-07-20T01:02:01.7318237Z 52 
2019-07-20T01:02:01.7318237Z 52 
2019-07-20T01:02:01.7318262Z 
2019-07-20T01:02:01.7318281Z 
2019-07-20T01:02:01.7318315Z The actual stderr differed from the expected stderr.
2019-07-20T01:02:01.7318541Z Actual stderr saved to /checkout/obj/build/x86_64-unknown-linux-gnu/test/ui/mismatched_types/binops/binops.stderr
2019-07-20T01:02:01.7318736Z To update references, rerun the tests and pass the `--bless` flag
2019-07-20T01:02:01.7319935Z To only update this specific test, also pass `--test-args mismatched_types/binops.rs`
2019-07-20T01:02:01.7320053Z error: 1 errors occurred comparing output.
2019-07-20T01:02:01.7320099Z status: exit code: 1
2019-07-20T01:02:01.7320099Z status: exit code: 1
2019-07-20T01:02:01.7320926Z command: "/checkout/obj/build/x86_64-unknown-linux-gnu/stage2/bin/rustc" "/checkout/src/test/ui/mismatched_types/binops.rs" "-Zthreads=1" "--target=x86_64-unknown-linux-gnu" "--error-format" "json" "-Zui-testing" "-C" "prefer-dynamic" "--out-dir" "/checkout/obj/build/x86_64-unknown-linux-gnu/test/ui/mismatched_types/binops" "-Crpath" "-O" "-Cdebuginfo=0" "-Zunstable-options" "-Lnative=/checkout/obj/build/x86_64-unknown-linux-gnu/native/rust-test-helpers" "-L" "/checkout/obj/build/x86_64-unknown-linux-gnu/test/ui/mismatched_types/binops/auxiliary" "-A" "unused"
2019-07-20T01:02:01.7321490Z ------------------------------------------
2019-07-20T01:02:01.7321541Z 
2019-07-20T01:02:01.7321773Z ------------------------------------------
2019-07-20T01:02:01.7321821Z stderr:
2019-07-20T01:02:01.7321821Z stderr:
2019-07-20T01:02:01.7322053Z ------------------------------------------
2019-07-20T01:02:01.7322111Z error[E0277]: cannot add `std::option::Option<{integer}>` to `{integer}`
2019-07-20T01:02:01.7322426Z    |
2019-07-20T01:02:01.7322426Z    |
2019-07-20T01:02:01.7322661Z LL |     1 + Some(1); //~ ERROR cannot add `std::option::Option<{integer}>` to `{integer}`
2019-07-20T01:02:01.7322706Z    |       ^ no implementation for `{integer} + std::option::Option<{integer}>`
2019-07-20T01:02:01.7323008Z    |
2019-07-20T01:02:01.7323067Z    = help: the trait `std::ops::Add<std::option::Option<{integer}>>` is not implemented for `{integer}`
2019-07-20T01:02:01.7323095Z 
2019-07-20T01:02:01.7323132Z error[E0277]: cannot subtract `std::option::Option<{integer}>` from `usize`
2019-07-20T01:02:01.7323395Z    |
2019-07-20T01:02:01.7323395Z    |
2019-07-20T01:02:01.7323602Z LL |     2 as usize - Some(1); //~ ERROR cannot subtract `std::option::Option<{integer}>` from `usize`
2019-07-20T01:02:01.7323814Z    |                ^ no implementation for `usize - std::option::Option<{integer}>`
2019-07-20T01:02:01.7323851Z    |
2019-07-20T01:02:01.7323888Z    = help: the trait `std::ops::Sub<std::option::Option<{integer}>>` is not implemented for `usize`
2019-07-20T01:02:01.7323926Z 
2019-07-20T01:02:01.7323960Z error[E0277]: cannot multiply `()` to `{integer}`
2019-07-20T01:02:01.7324189Z    |
2019-07-20T01:02:01.7324189Z    |
2019-07-20T01:02:01.7324239Z LL |     3 * (); //~ ERROR cannot multiply `()` to `{integer}`
2019-07-20T01:02:01.7324276Z    |       ^ no implementation for `{integer} * ()`
2019-07-20T01:02:01.7324308Z    |
2019-07-20T01:02:01.7324355Z    = help: the trait `std::ops::Mul<()>` is not implemented for `{integer}`
2019-07-20T01:02:01.7324379Z 
2019-07-20T01:02:01.7324412Z error[E0277]: cannot divide `{integer}` by `&str`
2019-07-20T01:02:01.7324644Z    |
2019-07-20T01:02:01.7324644Z    |
2019-07-20T01:02:01.7324679Z LL |     4 / ""; //~ ERROR cannot divide `{integer}` by `&str`
2019-07-20T01:02:01.7324716Z    |       ^ no implementation for `{integer} / &str`
2019-07-20T01:02:01.7324758Z    |
2019-07-20T01:02:01.7324794Z    = help: the trait `std::ops::Div<&str>` is not implemented for `{integer}`
2019-07-20T01:02:01.7324818Z 
2019-07-20T01:02:01.7324864Z error[E0277]: the trait bound `{integer}: core::closure::Closure` is not satisfied
2019-07-20T01:02:01.7325096Z    |
2019-07-20T01:02:01.7325096Z    |
2019-07-20T01:02:01.7325298Z LL |     5 < String::new(); //~ ERROR can't compare `{integer}` with `std::string::String`
2019-07-20T01:02:01.7325525Z    |       ^ the trait `core::closure::Closure` is not implemented for `{integer}`
2019-07-20T01:02:01.7325563Z    |
2019-07-20T01:02:01.7325605Z    = note: required because of the requirements on the impl of `std::cmp::PartialEq<std::string::String>` for `{integer}`
2019-07-20T01:02:01.7325642Z 
2019-07-20T01:02:01.7325681Z error[E0277]: the trait bound `std::string::String: core::closure::Closure` is not satisfied
2019-07-20T01:02:01.7325919Z    |
2019-07-20T01:02:01.7325919Z    |
2019-07-20T01:02:01.7326125Z LL |     5 < String::new(); //~ ERROR can't compare `{integer}` with `std::string::String`
2019-07-20T01:02:01.7326179Z    |       ^ the trait `core::closure::Closure` is not implemented for `std::string::String`
2019-07-20T01:02:01.7326311Z    |
2019-07-20T01:02:01.7326353Z    = note: required because of the requirements on the impl of `std::cmp::PartialEq<std::string::String>` for `{integer}`
2019-07-20T01:02:01.7326381Z 
2019-07-20T01:02:01.7326418Z error[E0277]: the trait bound `{integer}: core::closure::Closure` is not satisfied
2019-07-20T01:02:01.7326682Z    |
2019-07-20T01:02:01.7326682Z    |
2019-07-20T01:02:01.7326894Z LL |     6 == Ok(1); //~ ERROR can't compare `{integer}` with `std::result::Result<{integer}, _>`
2019-07-20T01:02:01.7326953Z    |       ^^ the trait `core::closure::Closure` is not implemented for `{integer}`
2019-07-20T01:02:01.7326990Z    |
2019-07-20T01:02:01.7327033Z    = note: required because of the requirements on the impl of `std::cmp::PartialEq<std::result::Result<{integer}, _>>` for `{integer}`
2019-07-20T01:02:01.7327076Z 
2019-07-20T01:02:01.7327193Z error[E0277]: the trait bound `std::result::Result<{integer}, _>: core::closure::Closure` is not satisfied
2019-07-20T01:02:01.7327463Z    |
2019-07-20T01:02:01.7327463Z    |
2019-07-20T01:02:01.7327676Z LL |     6 == Ok(1); //~ ERROR can't compare `{integer}` with `std::result::Result<{integer}, _>`
2019-07-20T01:02:01.7327726Z    |       ^^ the trait `core::closure::Closure` is not implemented for `std::result::Result<{integer}, _>`
2019-07-20T01:02:01.7327771Z    |
2019-07-20T01:02:01.7327813Z    = note: required because of the requirements on the impl of `std::cmp::PartialEq<std::result::Result<{integer}, _>>` for `{integer}`
2019-07-20T01:02:01.7327883Z error: aborting due to 8 previous errors
2019-07-20T01:02:01.7327906Z 
2019-07-20T01:02:01.7328101Z For more information about this error, try `rustc --explain E0277`.
2019-07-20T01:02:01.7328128Z 
2019-07-20T01:02:01.7328128Z 
2019-07-20T01:02:01.7328303Z ------------------------------------------
2019-07-20T01:02:01.7328337Z 
2019-07-20T01:02:01.7328362Z 
2019-07-20T01:02:01.7328545Z ---- [ui] ui/on-unimplemented/no-debug.rs stdout ----
2019-07-20T01:02:01.7328768Z diff of stderr:
2019-07-20T01:02:01.7328790Z 
2019-07-20T01:02:01.7329695Z - error[E0277]: `Foo` doesn't implement `std::fmt::Debug`
2019-07-20T01:02:01.7329760Z + error[E0277]: the trait bound `Foo: core::closure::Closure` is not satisfied
2019-07-20T01:02:01.7330065Z 3    |
2019-07-20T01:02:01.7330065Z 3    |
2019-07-20T01:02:01.7330112Z 4 LL |     println!("{:?} {:?}", Foo, Bar);
2019-07-20T01:02:01.7330142Z 
2019-07-20T01:02:01.7330404Z -    |                           ^^^ `Foo` cannot be formatted using `{:?}`
2019-07-20T01:02:01.7330467Z +    |                           ^^^ the trait `core::closure::Closure` is not implemented for `Foo`
2019-07-20T01:02:01.7330517Z 6    |
2019-07-20T01:02:01.7330771Z -    = help: the trait `std::fmt::Debug` is not implemented for `Foo`
2019-07-20T01:02:01.7331039Z -    = note: add `#[derive(Debug)]` or manually implement `std::fmt::Debug`
2019-07-20T01:02:01.7331108Z +    = note: required because of the requirements on the impl of `std::fmt::Debug` for `Foo`
2019-07-20T01:02:01.7331170Z 9    = note: required by `std::fmt::Debug::fmt`
2019-07-20T01:02:01.7331216Z 10 
2019-07-20T01:02:01.7331468Z - error[E0277]: `no_debug::Bar` doesn't implement `std::fmt::Debug`
2019-07-20T01:02:01.7331535Z + error[E0277]: the trait bound `no_debug::Bar: core::closure::Closure` is not satisfied
2019-07-20T01:02:01.7331802Z 13    |
2019-07-20T01:02:01.7331802Z 13    |
2019-07-20T01:02:01.7331855Z 14 LL |     println!("{:?} {:?}", Foo, Bar);
2019-07-20T01:02:01.7331886Z 
2019-07-20T01:02:01.7332198Z -    |                                ^^^ `no_debug::Bar` cannot be formatted using `{:?}` because it doesn't implement `std::fmt::Debug`
2019-07-20T01:02:01.7332265Z +    |                                ^^^ the trait `core::closure::Closure` is not implemented for `no_debug::Bar`
2019-07-20T01:02:01.7332435Z 16    |
2019-07-20T01:02:01.7334471Z -    = help: the trait `std::fmt::Debug` is not implemented for `no_debug::Bar`
2019-07-20T01:02:01.7334535Z +    = note: required because of the requirements on the impl of `std::fmt::Debug` for `no_debug::Bar`
2019-07-20T01:02:01.7334589Z 18    = note: required by `std::fmt::Debug::fmt`
2019-07-20T01:02:01.7334624Z 19 
2019-07-20T01:02:01.7334886Z 20 error[E0277]: `Foo` doesn't implement `std::fmt::Display`
2019-07-20T01:02:01.7334945Z 
2019-07-20T01:02:01.7334981Z The actual stderr differed from the expected stderr.
2019-07-20T01:02:01.7335216Z Actual stderr saved to /checkout/obj/build/x86_64-unknown-linux-gnu/test/ui/on-unimplemented/no-debug/no-debug.stderr
2019-07-20T01:02:01.7335216Z Actual stderr saved to /checkout/obj/build/x86_64-unknown-linux-gnu/test/ui/on-unimplemented/no-debug/no-debug.stderr
2019-07-20T01:02:01.7335420Z To update references, rerun the tests and pass the `--bless` flag
2019-07-20T01:02:01.7335629Z To only update this specific test, also pass `--test-args on-unimplemented/no-debug.rs`
2019-07-20T01:02:01.7335823Z error: 1 errors occurred comparing output.
2019-07-20T01:02:01.7335870Z status: exit code: 1
2019-07-20T01:02:01.7335870Z status: exit code: 1
2019-07-20T01:02:01.7336482Z command: "/checkout/obj/build/x86_64-unknown-linux-gnu/stage2/bin/rustc" "/checkout/src/test/ui/on-unimplemented/no-debug.rs" "-Zthreads=1" "--target=x86_64-unknown-linux-gnu" "--error-format" "json" "-Zui-testing" "-C" "prefer-dynamic" "--out-dir" "/checkout/obj/build/x86_64-unknown-linux-gnu/test/ui/on-unimplemented/no-debug" "-Crpath" "-O" "-Cdebuginfo=0" "-Zunstable-options" "-Lnative=/checkout/obj/build/x86_64-unknown-linux-gnu/native/rust-test-helpers" "-L" "/checkout/obj/build/x86_64-unknown-linux-gnu/test/ui/on-unimplemented/no-debug/auxiliary" "-A" "unused"
2019-07-20T01:02:01.7336745Z ------------------------------------------
2019-07-20T01:02:01.7336773Z 
2019-07-20T01:02:01.7336958Z ------------------------------------------
2019-07-20T01:02:01.7336994Z stderr:
2019-07-20T01:02:01.7336994Z stderr:
2019-07-20T01:02:01.7337162Z ------------------------------------------
2019-07-20T01:02:01.7337226Z error[E0277]: the trait bound `Foo: core::closure::Closure` is not satisfied
2019-07-20T01:02:01.7337465Z    |
2019-07-20T01:02:01.7337465Z    |
2019-07-20T01:02:01.7337507Z LL |     println!("{:?} {:?}", Foo, Bar);
2019-07-20T01:02:01.7337548Z    |                           ^^^ the trait `core::closure::Closure` is not implemented for `Foo`
2019-07-20T01:02:01.7337586Z    |
2019-07-20T01:02:01.7337632Z    = note: required because of the requirements on the impl of `std::fmt::Debug` for `Foo`
2019-07-20T01:02:01.7337673Z    = note: required by `std::fmt::Debug::fmt`
2019-07-20T01:02:01.7337697Z 
2019-07-20T01:02:01.7337740Z error[E0277]: the trait bound `no_debug::Bar: core::closure::Closure` is not satisfied
2019-07-20T01:02:01.7337978Z    |
2019-07-20T01:02:01.7337978Z    |
2019-07-20T01:02:01.7338017Z LL |     println!("{:?} {:?}", Foo, Bar);
2019-07-20T01:02:01.7338074Z    |                                ^^^ the trait `core::closure::Closure` is not implemented for `no_debug::Bar`
2019-07-20T01:02:01.7338112Z    |
2019-07-20T01:02:01.7338152Z    = note: required because of the requirements on the impl of `std::fmt::Debug` for `no_debug::Bar`
2019-07-20T01:02:01.7338199Z    = note: required by `std::fmt::Debug::fmt`
2019-07-20T01:02:01.7338223Z 
2019-07-20T01:02:01.7338416Z error[E0277]: `Foo` doesn't implement `std::fmt::Display`
2019-07-20T01:02:01.7338651Z    |
2019-07-20T01:02:01.7338651Z    |
2019-07-20T01:02:01.7338685Z LL |     println!("{} {}", Foo, Bar);
2019-07-20T01:02:01.7338732Z    |                       ^^^ `Foo` cannot be formatted with the default formatter
2019-07-20T01:02:01.7338768Z    |
2019-07-20T01:02:01.7338805Z    = help: the trait `std::fmt::Display` is not implemented for `Foo`
2019-07-20T01:02:01.7339559Z    = note: in format strings you may be able to use `{:?}` (or {:#?} for pretty-print) instead
2019-07-20T01:02:01.7339763Z    = note: required by `std::fmt::Display::fmt`
2019-07-20T01:02:01.7339795Z 
2019-07-20T01:02:01.7340078Z error[E0277]: `no_debug::Bar` doesn't implement `std::fmt::Display`
2019-07-20T01:02:01.7340385Z    |
2019-07-20T01:02:01.7340385Z    |
2019-07-20T01:02:01.7340429Z LL |     println!("{} {}", Foo, Bar);
2019-07-20T01:02:01.7340491Z    |                            ^^^ `no_debug::Bar` cannot be formatted with the default formatter
2019-07-20T01:02:01.7340538Z    |
2019-07-20T01:02:01.7340587Z    = help: the trait `std::fmt::Display` is not implemented for `no_debug::Bar`
2019-07-20T01:02:01.7340872Z    = note: in format strings you may be able to use `{:?}` (or {:#?} for pretty-print) instead
2019-07-20T01:02:01.7340928Z    = note: required by `std::fmt::Display::fmt`
2019-07-20T01:02:01.7341005Z error: aborting due to 4 previous errors
2019-07-20T01:02:01.7341043Z 
2019-07-20T01:02:01.7341379Z For more information about this error, try `rustc --explain E0277`.
2019-07-20T01:02:01.7341424Z 
2019-07-20T01:02:01.7341424Z 
2019-07-20T01:02:01.7341668Z ------------------------------------------
2019-07-20T01:02:01.7341709Z 
2019-07-20T01:02:01.7341736Z 
2019-07-20T01:02:01.7341973Z ---- [ui] ui/parser/lex-bad-char-literals-6.rs stdout ----
2019-07-20T01:02:01.7342023Z diff of stderr:
2019-07-20T01:02:01.7342058Z 
2019-07-20T01:02:01.7342101Z 28 LL |     let z = "ef";
2019-07-20T01:02:01.7342190Z 30 
2019-07-20T01:02:01.7342190Z 30 
2019-07-20T01:02:01.7342426Z - error[E0277]: can't compare `&str` with `char`
2019-07-20T01:02:01.7342484Z + error[E0277]: the trait bound `&str: core::closure::Closure` is not satisfied
2019-07-20T01:02:01.7342865Z 32   --> $DIR/lex-bad-char-literals-6.rs:9:10
2019-07-20T01:02:01.7342943Z 34 LL |     if x == y {}
2019-07-20T01:02:01.7342965Z 
2019-07-20T01:02:01.7342965Z 
2019-07-20T01:02:01.7343146Z -    |          ^^ no implementation for `&str == char`
2019-07-20T01:02:01.7343213Z +    |          ^^ the trait `core::closure::Closure` is not implemented for `&str`
2019-07-20T01:02:01.7343250Z 36    |
2019-07-20T01:02:01.7343616Z -    = help: the trait `std::cmp::PartialEq<char>` is not implemented for `&str`
2019-07-20T01:02:01.7343670Z +    = note: required because of the requirements on the impl of `std::cmp::PartialEq<char>` for `&str`
2019-07-20T01:02:01.7343705Z 38 
2019-07-20T01:02:01.7343740Z + error[E0277]: the trait bound `char: core::closure::Closure` is not satisfied
2019-07-20T01:02:01.7343914Z +   --> $DIR/lex-bad-char-literals-6.rs:9:10
2019-07-20T01:02:01.7343949Z +    |
2019-07-20T01:02:01.7343981Z + LL |     if x == y {}
2019-07-20T01:02:01.7344029Z +    |          ^^ the trait `core::closure::Closure` is not implemented for `char`
2019-07-20T01:02:01.7344063Z +    |
2019-07-20T01:02:01.7344101Z +    = note: required because of the requirements on the impl of `std::cmp::PartialEq<char>` for `&str`
2019-07-20T01:02:01.7344193Z 39 error[E0308]: mismatched types
2019-07-20T01:02:01.7344366Z 40   --> $DIR/lex-bad-char-literals-6.rs:15:20
2019-07-20T01:02:01.7344402Z 41    |
2019-07-20T01:02:01.7344432Z 
2019-07-20T01:02:01.7344432Z 
2019-07-20T01:02:01.7344464Z 45    = note: expected type `usize`
2019-07-20T01:02:01.7344628Z 46               found type `&'static str`
2019-07-20T01:02:01.7344668Z 47 
2019-07-20T01:02:01.7344834Z - error[E0277]: can't compare `&str` with `char`
2019-07-20T01:02:01.7344876Z + error[E0277]: the trait bound `&str: core::closure::Closure` is not satisfied
2019-07-20T01:02:01.7345044Z 49   --> $DIR/lex-bad-char-literals-6.rs:12:10
2019-07-20T01:02:01.7345117Z 51 LL |     if x == z {}
2019-07-20T01:02:01.7345138Z 
2019-07-20T01:02:01.7345138Z 
2019-07-20T01:02:01.7345315Z -    |          ^^ no implementation for `&str == char`
2019-07-20T01:02:01.7345358Z +    |          ^^ the trait `core::closure::Closure` is not implemented for `&str`
2019-07-20T01:02:01.7345393Z 53    |
2019-07-20T01:02:01.7345586Z -    = help: the trait `std::cmp::PartialEq<char>` is not implemented for `&str`
2019-07-20T01:02:01.7345726Z +    = note: required because of the requirements on the impl of `std::cmp::PartialEq<char>` for `&str`
2019-07-20T01:02:01.7345949Z - error: aborting due to 6 previous errors
2019-07-20T01:02:01.7345949Z - error: aborting due to 6 previous errors
2019-07-20T01:02:01.7346002Z + error[E0277]: the trait bound `char: core::closure::Closure` is not satisfied
2019-07-20T01:02:01.7346170Z +   --> $DIR/lex-bad-char-literals-6.rs:12:10
2019-07-20T01:02:01.7346247Z + LL |     if x == z {}
2019-07-20T01:02:01.7346247Z + LL |     if x == z {}
2019-07-20T01:02:01.7346284Z +    |          ^^ the trait `core::closure::Closure` is not implemented for `char`
2019-07-20T01:02:01.7346317Z +    |
2019-07-20T01:02:01.7346363Z +    = note: required because of the requirements on the impl of `std::cmp::PartialEq<char>` for `&str`
2019-07-20T01:02:01.7346429Z + error: aborting due to 8 previous errors
2019-07-20T01:02:01.7346467Z 57 
2019-07-20T01:02:01.7346572Z 58 Some errors have detailed explanations: E0277, E0308.
2019-07-20T01:02:01.7346791Z 59 For more information about an error, try `rustc --explain E0277`.
2019-07-20T01:02:01.7346791Z 59 For more information about an error, try `rustc --explain E0277`.
2019-07-20T01:02:01.7346818Z 
2019-07-20T01:02:01.7346848Z 
2019-07-20T01:02:01.7346882Z The actual stderr differed from the expected stderr.
2019-07-20T01:02:01.7347117Z Actual stderr saved to /checkout/obj/build/x86_64-unknown-linux-gnu/test/ui/parser/lex-bad-char-literals-6/lex-bad-char-literals-6.stderr
2019-07-20T01:02:01.7347315Z To update references, rerun the tests and pass the `--bless` flag
2019-07-20T01:02:01.7347520Z To only update this specific test, also pass `--test-args parser/lex-bad-char-literals-6.rs`
2019-07-20T01:02:01.7347580Z error: 1 errors occurred comparing output.
2019-07-20T01:02:01.7347623Z status: exit code: 1
2019-07-20T01:02:01.7347623Z status: exit code: 1
2019-07-20T01:02:01.7348176Z command: "/checkout/obj/build/x86_64-unknown-linux-gnu/stage2/bin/rustc" "/checkout/src/test/ui/parser/lex-bad-char-literals-6.rs" "-Zthreads=1" "--target=x86_64-unknown-linux-gnu" "--error-format" "json" "-Zui-testing" "-C" "prefer-dynamic" "--out-dir" "/checkout/obj/build/x86_64-unknown-linux-gnu/test/ui/parser/lex-bad-char-literals-6" "-Crpath" "-O" "-Cdebuginfo=0" "-Zunstable-options" "-Lnative=/checkout/obj/build/x86_64-unknown-linux-gnu/native/rust-test-helpers" "-L" "/checkout/obj/build/x86_64-unknown-linux-gnu/test/ui/parser/lex-bad-char-literals-6/auxiliary" "-A" "unused"
2019-07-20T01:02:01.7348427Z ------------------------------------------
2019-07-20T01:02:01.7348452Z 
2019-07-20T01:02:01.7348623Z ------------------------------------------
2019-07-20T01:02:01.7348657Z stderr:
2019-07-20T01:02:01.7348657Z stderr:
2019-07-20T01:02:01.7348814Z ------------------------------------------
2019-07-20T01:02:01.7348863Z error: character literal may only contain one codepoint
2019-07-20T01:02:01.7349475Z   --> /checkout/src/test/ui/parser/lex-bad-char-literals-6.rs:2:19
2019-07-20T01:02:01.7349537Z    |
2019-07-20T01:02:01.7349762Z LL |     let x: &str = 'ab';
2019-07-20T01:02:01.7349831Z    |                   ^^^^
2019-07-20T01:02:01.7349881Z help: if you meant to write a `str` literal, use double quotes
2019-07-20T01:02:01.7349937Z    |
2019-07-20T01:02:01.7349981Z LL |     let x: &str = "ab";
2019-07-20T01:02:01.7350055Z 
2019-07-20T01:02:01.7350055Z 
2019-07-20T01:02:01.7350110Z error: character literal may only contain one codepoint
2019-07-20T01:02:01.7350366Z   --> /checkout/src/test/ui/parser/lex-bad-char-literals-6.rs:4:19
2019-07-20T01:02:01.7350416Z    |
2019-07-20T01:02:01.7350630Z LL |     let y: char = 'cd';
2019-07-20T01:02:01.7350680Z    |                   ^^^^
2019-07-20T01:02:01.7350730Z help: if you meant to write a `str` literal, use double quotes
2019-07-20T01:02:01.7350776Z    |
2019-07-20T01:02:01.7350827Z LL |     let y: char = "cd";
2019-07-20T01:02:01.7350902Z 
2019-07-20T01:02:01.7350902Z 
2019-07-20T01:02:01.7350957Z error: character literal may only contain one codepoint
2019-07-20T01:02:01.7351357Z   --> /checkout/src/test/ui/parser/lex-bad-char-literals-6.rs:6:13
2019-07-20T01:02:01.7351407Z    |
2019-07-20T01:02:01.7351608Z LL |     let z = 'ef';
2019-07-20T01:02:01.7351669Z    |             ^^^^
2019-07-20T01:02:01.7351719Z help: if you meant to write a `str` literal, use double quotes
2019-07-20T01:02:01.7351764Z    |
2019-07-20T01:02:01.7351816Z LL |     let z = "ef";
2019-07-20T01:02:01.7351889Z 
2019-07-20T01:02:01.7351889Z 
2019-07-20T01:02:01.7351937Z error[E0277]: the trait bound `&str: core::closure::Closure` is not satisfied
2019-07-20T01:02:01.7352209Z   --> /checkout/src/test/ui/parser/lex-bad-char-literals-6.rs:9:10
2019-07-20T01:02:01.7352304Z LL |     if x == y {}
2019-07-20T01:02:01.7352304Z LL |     if x == y {}
2019-07-20T01:02:01.7352366Z    |          ^^ the trait `core::closure::Closure` is not implemented for `&str`
2019-07-20T01:02:01.7352412Z    |
2019-07-20T01:02:01.7352463Z    = note: required because of the requirements on the impl of `std::cmp::PartialEq<char>` for `&str`
2019-07-20T01:02:01.7352763Z 
2019-07-20T01:02:01.7352807Z error[E0277]: the trait bound `char: core::closure::Closure` is not satisfied
2019-07-20T01:02:01.7353021Z   --> /checkout/src/test/ui/parser/lex-bad-char-literals-6.rs:9:10
2019-07-20T01:02:01.7353094Z LL |     if x == y {}
2019-07-20T01:02:01.7353094Z LL |     if x == y {}
2019-07-20T01:02:01.7353132Z    |          ^^ the trait `core::closure::Closure` is not implemented for `char`
2019-07-20T01:02:01.7353172Z    |
2019-07-20T01:02:01.7353210Z    = note: required because of the requirements on the impl of `std::cmp::PartialEq<char>` for `&str`
2019-07-20T01:02:01.7353267Z error[E0308]: mismatched types
2019-07-20T01:02:01.7353461Z   --> /checkout/src/test/ui/parser/lex-bad-char-literals-6.rs:15:20
2019-07-20T01:02:01.7353496Z    |
2019-07-20T01:02:01.7353496Z    |
2019-07-20T01:02:01.7353528Z LL |     let a: usize = "";
2019-07-20T01:02:01.7353571Z    |                    ^^ expected usize, found reference
2019-07-20T01:02:01.7353649Z    = note: expected type `usize`
2019-07-20T01:02:01.7353818Z               found type `&'static str`
2019-07-20T01:02:01.7353849Z 
2019-07-20T01:02:01.7353849Z 
2019-07-20T01:02:01.7353885Z error[E0277]: the trait bound `&str: core::closure::Closure` is not satisfied
2019-07-20T01:02:01.7354071Z   --> /checkout/src/test/ui/parser/lex-bad-char-literals-6.rs:12:10
2019-07-20T01:02:01.7354144Z LL |     if x == z {}
2019-07-20T01:02:01.7354144Z LL |     if x == z {}
2019-07-20T01:02:01.7354181Z    |          ^^ the trait `core::closure::Closure` is not implemented for `&str`
2019-07-20T01:02:01.7354220Z    |
2019-07-20T01:02:01.7354257Z    = note: required because of the requirements on the impl of `std::cmp::PartialEq<char>` for `&str`
2019-07-20T01:02:01.7354282Z 
2019-07-20T01:02:01.7354317Z error[E0277]: the trait bound `char: core::closure::Closure` is not satisfied
2019-07-20T01:02:01.7354510Z   --> /checkout/src/test/ui/parser/lex-bad-char-literals-6.rs:12:10
2019-07-20T01:02:01.7354577Z LL |     if x == z {}
2019-07-20T01:02:01.7354577Z LL |     if x == z {}
2019-07-20T01:02:01.7354634Z    |          ^^ the trait `core::closure::Closure` is not implemented for `char`
2019-07-20T01:02:01.7354668Z    |
2019-07-20T01:02:01.7354706Z    = note: required because of the requirements on the impl of `std::cmp::PartialEq<char>` for `&str`
2019-07-20T01:02:01.7354769Z error: aborting due to 8 previous errors
2019-07-20T01:02:01.7354791Z 
2019-07-20T01:02:01.7354824Z Some errors have detailed explanations: E0277, E0308.
2019-07-20T01:02:01.7355019Z For more information about an error, try `rustc --explain E0277`.
2019-07-20T01:02:01.7355019Z For more information about an error, try `rustc --explain E0277`.
2019-07-20T01:02:01.7355045Z 
2019-07-20T01:02:01.7355207Z ------------------------------------------
2019-07-20T01:02:01.7355231Z 
2019-07-20T01:02:01.7355250Z 
2019-07-20T01:02:01.7355419Z ---- [ui] ui/partialeq_help.rs stdout ----
2019-07-20T01:02:01.7355455Z diff of stderr:
2019-07-20T01:02:01.7355476Z 
2019-07-20T01:02:01.7355637Z - error[E0277]: can't compare `&T` with `T`
2019-07-20T01:02:01.7355691Z + error[E0277]: the trait bound `&T: core::closure::Closure` is not satisfied
2019-07-20T01:02:01.7355990Z 3    |
2019-07-20T01:02:01.7356030Z 4 LL |     a == b;
2019-07-20T01:02:01.7356051Z 
2019-07-20T01:02:01.7356051Z 
2019-07-20T01:02:01.7356216Z -    |       ^^ no implementation for `&T == T`
2019-07-20T01:02:01.7356262Z +    |       ^^ the trait `core::closure::Closure` is not implemented for `&T`
2019-07-20T01:02:01.7356298Z 6    |
2019-07-20T01:02:01.7356481Z -    = help: the trait `std::cmp::PartialEq<T>` is not implemented for `&T`
2019-07-20T01:02:01.7356665Z -    = help: consider adding a `where &T: std::cmp::PartialEq<T>` bound
2019-07-20T01:02:01.7356720Z +    = note: required because of the requirements on the impl of `std::cmp::PartialEq<T>` for `&T`
2019-07-20T01:02:01.7356913Z - error: aborting due to previous error
2019-07-20T01:02:01.7356913Z - error: aborting due to previous error
2019-07-20T01:02:01.7356960Z + error[E0277]: the trait bound `T: core::closure::Closure` is not satisfied
2019-07-20T01:02:01.7357127Z +   --> $DIR/partialeq_help.rs:2:7
2019-07-20T01:02:01.7357227Z +    |
2019-07-20T01:02:01.7357277Z + LL |     a == b;
2019-07-20T01:02:01.7357313Z +    |       ^^ the trait `core::closure::Closure` is not implemented for `T`
2019-07-20T01:02:01.7357348Z +    |
2019-07-20T01:02:01.7357389Z +    = help: consider adding a `where T: core::closure::Closure` bound
2019-07-20T01:02:01.7357430Z +    = note: required because of the requirements on the impl of `std::cmp::PartialEq<T>` for `&T`
2019-07-20T01:02:01.7357502Z + error: aborting due to 2 previous errors
2019-07-20T01:02:01.7357533Z 11 
2019-07-20T01:02:01.7357744Z 12 For more information about this error, try `rustc --explain E0277`.
2019-07-20T01:02:01.7357779Z 13 
2019-07-20T01:02:01.7357779Z 13 
2019-07-20T01:02:01.7357805Z 
2019-07-20T01:02:01.7357824Z 
2019-07-20T01:02:01.7357857Z The actual stderr differed from the expected stderr.
2019-07-20T01:02:01.7358072Z Actual stderr saved to /checkout/obj/build/x86_64-unknown-linux-gnu/test/ui/partialeq_help/partialeq_help.stderr
2019-07-20T01:02:01.7358278Z To update references, rerun the tests and pass the `--bless` flag
2019-07-20T01:02:01.7358466Z To only update this specific test, also pass `--test-args partialeq_help.rs`
2019-07-20T01:02:01.7358532Z error: 1 errors occurred comparing output.
2019-07-20T01:02:01.7358565Z status: exit code: 1
2019-07-20T01:02:01.7358565Z status: exit code: 1
2019-07-20T01:02:01.7359651Z command: "/checkout/obj/build/x86_64-unknown-linux-gnu/stage2/bin/rustc" "/checkout/src/test/ui/partialeq_help.rs" "-Zthreads=1" "--target=x86_64-unknown-linux-gnu" "--error-format" "json" "-Zui-testing" "-C" "prefer-dynamic" "--out-dir" "/checkout/obj/build/x86_64-unknown-linux-gnu/test/ui/partialeq_help" "-Crpath" "-O" "-Cdebuginfo=0" "-Zunstable-options" "-Lnative=/checkout/obj/build/x86_64-unknown-linux-gnu/native/rust-test-helpers" "-L" "/checkout/obj/build/x86_64-unknown-linux-gnu/test/ui/partialeq_help/auxiliary" "-A" "unused"
2019-07-20T01:02:01.7360009Z ------------------------------------------
2019-07-20T01:02:01.7360064Z 
2019-07-20T01:02:01.7360302Z ------------------------------------------
2019-07-20T01:02:01.7360349Z stderr:
2019-07-20T01:02:01.7360349Z stderr:
2019-07-20T01:02:01.7360565Z ------------------------------------------
2019-07-20T01:02:01.7360630Z error[E0277]: the trait bound `&T: core::closure::Closure` is not satisfied
2019-07-20T01:02:01.7360917Z    |
2019-07-20T01:02:01.7360917Z    |
2019-07-20T01:02:01.7360970Z LL |     a == b; //~ ERROR E0277
2019-07-20T01:02:01.7361023Z    |       ^^ the trait `core::closure::Closure` is not implemented for `&T`
2019-07-20T01:02:01.7361069Z    |
2019-07-20T01:02:01.7361126Z    = note: required because of the requirements on the impl of `std::cmp::PartialEq<T>` for `&T`
2019-07-20T01:02:01.7361164Z 
2019-07-20T01:02:01.7361218Z error[E0277]: the trait bound `T: core::closure::Closure` is not satisfied
2019-07-20T01:02:01.7361658Z    |
2019-07-20T01:02:01.7361658Z    |
2019-07-20T01:02:01.7361715Z LL |     a == b; //~ ERROR E0277
2019-07-20T01:02:01.7361769Z    |       ^^ the trait `core::closure::Closure` is not implemented for `T`
2019-07-20T01:02:01.7361827Z    |
2019-07-20T01:02:01.7361880Z    = help: consider adding a `where T: core::closure::Closure` bound
2019-07-20T01:02:01.7361939Z    = note: required because of the requirements on the impl of `std::cmp::PartialEq<T>` for `&T`
2019-07-20T01:02:01.7362031Z error: aborting due to 2 previous errors
2019-07-20T01:02:01.7362064Z 
2019-07-20T01:02:01.7362372Z For more information about this error, try `rustc --explain E0277`.
2019-07-20T01:02:01.7362418Z 
2019-07-20T01:02:01.7362418Z 
2019-07-20T01:02:01.7362955Z ------------------------------------------
2019-07-20T01:02:01.7362979Z 
2019-07-20T01:02:01.7362998Z 
2019-07-20T01:02:01.7363170Z ---- [ui] ui/range/range_traits-1.rs stdout ----
2019-07-20T01:02:01.7363208Z diff of stderr:
2019-07-20T01:02:01.7363229Z 
2019-07-20T01:02:01.7363506Z - error[E0277]: can't compare `std::ops::Range<usize>` with `std::ops::Range<usize>`
2019-07-20T01:02:01.7363606Z + error[E0277]: the trait bound `std::ops::Range<usize>: core::closure::Closure` is not satisfied
2019-07-20T01:02:01.7363807Z 2   --> $DIR/range_traits-1.rs:5:5
2019-07-20T01:02:01.7363922Z 4 LL |     a: Range<usize>,
2019-07-20T01:02:01.7363944Z 
2019-07-20T01:02:01.7363944Z 
2019-07-20T01:02:01.7364190Z -    |     ^^^^^^^^^^^^^^^ no implementation for `std::ops::Range<usize> < std::ops::Range<usize>` and `std::ops::Range<usize> > std::ops::Range<usize>`
2019-07-20T01:02:01.7364282Z +    |     ^^^^^^^^^^^^^^^ the trait `core::closure::Closure` is not implemented for `std::ops::Range<usize>`
2019-07-20T01:02:01.7364323Z 6    |
2019-07-20T01:02:01.7364526Z -    = help: the trait `std::cmp::PartialOrd` is not implemented for `std::ops::Range<usize>`
2019-07-20T01:02:01.7364617Z +    = note: required because of the requirements on the impl of `std::cmp::PartialOrd` for `std::ops::Range<usize>`
2019-07-20T01:02:01.7364675Z 8    = note: required by `std::cmp::PartialOrd::partial_cmp`
2019-07-20T01:02:01.7364707Z 9 
2019-07-20T01:02:01.7364952Z - error[E0277]: can't compare `std::ops::RangeTo<usize>` with `std::ops::RangeTo<usize>`
2019-07-20T01:02:01.7365000Z + error[E0277]: the trait bound `std::ops::RangeTo<usize>: core::closure::Closure` is not satisfied
2019-07-20T01:02:01.7365168Z 11   --> $DIR/range_traits-1.rs:8:5
2019-07-20T01:02:01.7365242Z 12    |
2019-07-20T01:02:01.7365274Z 13 LL |     b: RangeTo<usize>,
2019-07-20T01:02:01.7365295Z 
2019-07-20T01:02:01.7365544Z -    |     ^^^^^^^^^^^^^^^^^ no implementation for `std::ops::RangeTo<usize> < std::ops::RangeTo<usize>` and `std::ops::RangeTo<usize> > std::ops::RangeTo<usize>`
2019-07-20T01:02:01.7365637Z +    |     ^^^^^^^^^^^^^^^^^ the trait `core::closure::Closure` is not implemented for `std::ops::RangeTo<usize>`
2019-07-20T01:02:01.7365673Z 15    |
2019-07-20T01:02:01.7365873Z -    = help: the trait `std::cmp::PartialOrd` is not implemented for `std::ops::RangeTo<usize>`
2019-07-20T01:02:01.7365977Z +    = note: required because of the requirements on the impl of `std::cmp::PartialOrd` for `std::ops::RangeTo<usize>`
2019-07-20T01:02:01.7366019Z 17    = note: required by `std::cmp::PartialOrd::partial_cmp`
2019-07-20T01:02:01.7366052Z 18 
2019-07-20T01:02:01.7366297Z - error[E0277]: can't compare `std::ops::RangeFrom<usize>` with `std::ops::RangeFrom<usize>`
2019-07-20T01:02:01.7366343Z + error[E0277]: the trait bound `std::ops::RangeFrom<usize>: core::closure::Closure` is not satisfied
2019-07-20T01:02:01.7366507Z 20   --> $DIR/range_traits-1.rs:11:5
2019-07-20T01:02:01.7366586Z 21    |
2019-07-20T01:02:01.7366619Z 22 LL |     c: RangeFrom<usize>,
2019-07-20T01:02:01.7366641Z 
2019-07-20T01:02:01.7366936Z -    |     ^^^^^^^^^^^^^^^^^^^ no implementation for `std::ops::RangeFrom<usize> < std::ops::RangeFrom<usize>` and `std::ops::RangeFrom<usize> > std::ops::RangeFrom<usize>`
2019-07-20T01:02:01.7366995Z +    |     ^^^^^^^^^^^^^^^^^^^ the trait `core::closure::Closure` is not implemented for `std::ops::RangeFrom<usize>`
2019-07-20T01:02:01.7367107Z 24    |
2019-07-20T01:02:01.7367382Z -    = help: the trait `std::cmp::PartialOrd` is not implemented for `std::ops::RangeFrom<usize>`
2019-07-20T01:02:01.7367433Z +    = note: required because of the requirements on the impl of `std::cmp::PartialOrd` for `std::ops::RangeFrom<usize>`
2019-07-20T01:02:01.7367474Z 26    = note: required by `std::cmp::PartialOrd::partial_cmp`
2019-07-20T01:02:01.7367546Z 27 
2019-07-20T01:02:01.7367741Z - error[E0277]: can't compare `std::ops::RangeFull` with `std::ops::RangeFull`
2019-07-20T01:02:01.7367785Z + error[E0277]: the trait bound `std::ops::RangeFull: core::closure::Closure` is not satisfied
2019-07-20T01:02:01.7367990Z 29   --> $DIR/range_traits-1.rs:14:5
2019-07-20T01:02:01.7368026Z 30    |
2019-07-20T01:02:01.7368057Z 31 LL |     d: RangeFull,
---
2019-07-20T01:02:01.7517606Z test result: FAILED. 5766 passed; 48 failed; 21 ignored; 0 measured; 0 filtered out
2019-07-20T01:02:01.7517634Z 
2019-07-20T01:02:01.7517661Z 
2019-07-20T01:02:01.7517681Z 
2019-07-20T01:02:01.7518790Z command did not execute successfully: "/checkout/obj/build/x86_64-unknown-linux-gnu/stage0-tools-bin/compiletest" "--compile-lib-path" "/checkout/obj/build/x86_64-unknown-linux-gnu/stage2/lib" "--run-lib-path" "/checkout/obj/build/x86_64-unknown-linux-gnu/stage2/lib/rustlib/x86_64-unknown-linux-gnu/lib" "--rustc-path" "/checkout/obj/build/x86_64-unknown-linux-gnu/stage2/bin/rustc" "--src-base" "/checkout/src/test/ui" "--build-base" "/checkout/obj/build/x86_64-unknown-linux-gnu/test/ui" "--stage-id" "stage2-x86_64-unknown-linux-gnu" "--mode" "ui" "--target" "x86_64-unknown-linux-gnu" "--host" "x86_64-unknown-linux-gnu" "--llvm-filecheck" "/usr/lib/llvm-6.0/bin/FileCheck" "--host-rustcflags" "-Crpath -O -Cdebuginfo=0 -Zunstable-options  -Lnative=/checkout/obj/build/x86_64-unknown-linux-gnu/native/rust-test-helpers" "--target-rustcflags" "-Crpath -O -Cdebuginfo=0 -Zunstable-options  -Lnative=/checkout/obj/build/x86_64-unknown-linux-gnu/native/rust-test-helpers" "--docck-python" "/usr/bin/python2.7" "--lldb-python" "/usr/bin/python2.7" "--gdb" "/usr/bin/gdb" "--quiet" "--llvm-version" "6.0.0\n" "--system-llvm" "--cc" "" "--cxx" "" "--cflags" "" "--llvm-components" "" "--llvm-cxxflags" "" "--adb-path" "adb" "--adb-test-dir" "/data/tmp/work" "--android-cross-path" "" "--color" "always"
2019-07-20T01:02:01.7520062Z 
2019-07-20T01:02:01.7520093Z 
2019-07-20T01:02:01.7520141Z failed to run: /checkout/obj/build/bootstrap/debug/bootstrap test
2019-07-20T01:02:01.7520198Z Build completed unsuccessfully in 0:49:12
2019-07-20T01:02:01.7520198Z Build completed unsuccessfully in 0:49:12
2019-07-20T01:02:01.7520563Z thread 'main' panicked at 'Some tests failed', src/tools/compiletest/src/main.rs:535:22
2019-07-20T01:02:01.7520753Z note: run with `RUST_BACKTRACE=1` environment variable to display a backtrace.
2019-07-20T01:02:02.7258737Z ##[error]Bash exited with code '1'.
2019-07-20T01:02:02.7291476Z ##[section]Starting: Checkout
2019-07-20T01:02:02.7293755Z ==============================================================================
2019-07-20T01:02:02.7293802Z Task         : Get sources
2019-07-20T01:02:02.7293839Z Description  : Get sources from a repository. Supports Git, TfsVC, and SVN repositories.

I'm a bot! I can only do what humans tell me to, so if this was not helpful or you have suggestions for improvements, please ping or otherwise contact @TimNN. (Feature Requests)

@shepmaster

This comment has been minimized.

Copy link
Member

commented Jul 22, 2019

Too wide-reaching for me!

r? @BurntSushi

@BurntSushi

This comment has been minimized.

Copy link
Member

commented Jul 22, 2019

This is outside my wheelhouse too. r? @alexcrichton cc @rust-lang/libs

I wouldn't be surprised if this needs an RFC, since this is adding a lot of impls to a core part of the language.

@alexcrichton

This comment has been minimized.

Copy link
Member

commented Jul 23, 2019

This seems like a neat way to implement closures and add features for closures, thanks for the work here @luca-barbieri!

I think the best way to go about landing this would be to split this into two pieces. One would be updating the compiler and moving the existing clone/copy impls to this new infrastructure, and that would largely require sign-off from the compiler team. For the libs team afterwards we could separately consider adding these new impls. I think the libs team wants to be in the loop on the first part since it'll likely influence the design, but @luca-barbieri how do you feel about that?

@Centril

This comment has been minimized.

Copy link
Member

commented Jul 23, 2019

New stable guarantees about closures, as provided in this PR, will require language team sign-off on an RFC.

This is far too subtle and has interactions with other parts of the language (e.g. rust-lang/rfcs#2229, tuple variadics, tying the fate to tuples, exposing the type of the upvars, using #[fundamental], lang items, coherence hacks, possibly generic closures (tho on initial inspection it does not seem so), questions around how these interact with async closures, possibly future const closures, etc.) to be decided on through a PR.

cc @rust-lang/lang

However, that needs to be fixed for tuples anyway, and the fix will fix closures as well.

There is no current consensus that it needs to be fixed for tuples (e.g. with variadics).

@luca-barbieri

This comment has been minimized.

Copy link
Contributor Author

commented Jul 24, 2019

Thank you for your feedback.

I'll look at writing an RFC, although it may take a while until I have time to do so.

@edmilsonefs

This comment has been minimized.

Copy link

commented Jul 30, 2019

Hey! This is a ping from triage, it seems to be a great plan @luca-barbieri.
Take your time I'm just updating to a more proper label. ;-D

@rustbot modify labels to +S-waiting-on-author, -S-waiting-on-review

@jesskfullwood

This comment has been minimized.

Copy link

commented Aug 4, 2019

Just want to chime in on a use-case for this work.

I have been writing a WASM web framework in Rust along the principles of Elm. The app maintains a virtual dom (VDOM) which mirrors the DOM. There is also a View function which runs whenever some application state changes. It creates a new VDOM, which is diffed with the previous VDOM, and the diffs are applied to the DOM. This is a very common frontend-framework pattern.

Problem - We want to create a closure to act as a listener for e.g. an onClick event. That part works fine, but when VDOM-diffing we cannot compare the 'new' closure with the existing one, since they are not PartialEq. That means we cannot know if any of the event listeners have changed, so they have to be torn down and rebuilt on every refresh. Ugly and inefficient.

A niche use-case to be sure - for now, at least!

@eddyb

This comment has been minimized.

Copy link
Member

commented Aug 9, 2019

I also have a combinator library for memoized graph-shaped computations (cyclotron), which can't be deduplicate work right now (it would need Eq + Ord or Eq + Hash).

@eddyb

This comment has been minimized.

Copy link
Member

commented Aug 9, 2019

IMO this should be solved properly with VGs ("variadic generics") and some form of (statically typed) closure reflection (could be std/rustc-internal).

We can defer the VG requirement by limiting closures like tuples, e.g. max 12 elements for most traits.

For example, || x + y could automatically (in the compiler) implement:

#[fundamental]
trait Closure {
    type Captures/*: Tuple*/;
    fn captures_ref(&self) -> &Self::Captures;
}
struct Capture<const NAME: &'static str, T>(T);

roughly like this:

impl Closure for /*typeof(|| x + y)*/ {
    type Captures = (Capture<"x", i32>, Capture<"y", i32>);
    fn captures_ref(&self) -> &Self::Captures {
        // Note that this requires the closure to be represented as its Captures:
        unsafe { &*(self as *const _ as *const _) }
    }
}

This is what a std impl based on this form of reflection would look like:

impl<A, B, const NAME_A: &'static str, const NAME_B: &'static str, C> fmt::Debug for C
where C: Closure<Captures = (Capture<NAME_A, A>, Capture<NAME_B, B>)>,
{
    fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
        let (a, b) = self.captures_ref();
        f.debug_struct("closure").field(NAME_A, a).field(NAME_B, b).finish()
    }
}

Of course, there is a lot to bikeshed here, but I think this could work now/soon.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
10 participants
You can’t perform that action at this time.