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

reserve `impl<T> From<!> for T` #62661

Open
wants to merge 7 commits into
base: master
from

Conversation

@arielb1
Copy link
Contributor

commented Jul 13, 2019

this is necessary for never-type stabilization.

cc #57012 #35121

I think we wanted a crater run for this @nikomatsakis?

r? @nikomatsakis

@cramertj

This comment has been minimized.

Copy link
Member

commented Jul 19, 2019

If we do a crater run, it should probably also include the change to make core::convert::Infallible an alias for !.

@nikomatsakis
Copy link
Contributor

left a comment

Did a quick read. Will leave some more comments on the PR -- it mostly looks good. I have two sets of concerns that are orthogonal.

}
(ImplPolarity::Positive, ImplPolarity::Negative) |
(ImplPolarity::Negative, ImplPolarity::Positive) => {
// FIXME: when can this happen?

This comment has been minimized.

Copy link
@nikomatsakis

nikomatsakis Jul 25, 2019

Contributor

Isn't that this case? (playground)

#![feature(optin_builtin_traits)]

auto trait Foo { }

impl Foo for u32 { }
impl !Foo for u32 { }

fn main() { }
&hir::ImplPolarity::Positive => ImplPolarity::Positive,
&hir::ImplPolarity::Negative => ImplPolarity::Negative,
&ty::ImplPolarity::Positive |
// FIXME: do we want to do something else here?

This comment has been minimized.

Copy link
@nikomatsakis

nikomatsakis Jul 25, 2019

Contributor

Almost certainly yes -- I think this means that reservation impls will show up in rustdoc as if they were real impls, which seems bound to lead to confusion, no?

This comment has been minimized.

Copy link
@Centril

Centril Jul 25, 2019

Member

Is it enough to show the reservation attribute?

This comment has been minimized.

Copy link
@arielb1

arielb1 Jul 27, 2019

Author Contributor

cc @QuietMisdreavus (I think you know Rustdoc?)

}

// reservation impls don't create coherence conflicts, even with
// non-chain overlap.

This comment has been minimized.

Copy link
@nikomatsakis

nikomatsakis Jul 25, 2019

Contributor

So I guess this implies that someone could implement impl From<!> for MyType -- well, I guess that something we wanted, IIRC.

This comment has been minimized.

Copy link
@arielb1

arielb1 Jul 27, 2019

Author Contributor

Yea this is intentional (otherwise I wouldn't write a test for it).

@@ -1325,17 +1325,21 @@ impl<'cx, 'tcx> SelectionContext<'cx, 'tcx> {
(result, dep_node)
}

// Treat negative impls as unimplemented
fn filter_negative_impls(
// Treat negative impls as unimplemented, and reservation impls as Ok(None)

This comment has been minimized.

Copy link
@nikomatsakis

nikomatsakis Jul 25, 2019

Contributor

instead of "as Ok(None), perhaps:

Treat negative impls as unimplemented, and reservation impls as ambiguity.

@nikomatsakis

This comment has been minimized.

Copy link
Contributor

commented Jul 25, 2019

So, this isn't the approach I had intended to take, though it may well be better. I thought I'd write out what I was thinking and see what you thought of it. Basically, I had intended to modify the is_knowable function in select.rs. The idea would be that T: From<!> is not "knowable" -- even if it otherwise would be (because T is local, presumably). I'm not sure just how I would modify said function though -- I guess you could scan the "reservation" impls for the trait (and ignore them otherwise), but that seems kind of hacky. I think I had in mind just hard-coding From, but that seems not especially satisfactory.

@nikomatsakis

This comment has been minimized.

Copy link
Contributor

commented Jul 25, 2019

In general, I think we need to document clearly what the semantics of a "reservation" impl are. They aren't quite what the name alone would suggest to me. In particular, just having a "reservation" impl doesn't guarantee that you can add the impl later, because of the fact that they never conflict for coherence reasons (though, given specialization, and a sufficiently simple reservation impl (without auxiliary where clauses), it may well mean that you could add the impl later).

I guess that the semantics are something like:

  • a reservation impl for the trait X prevents negative reasoning about X
  • it does not prevent people from adding other impls of X, including impls that overlap the reservation impl

The upshot is:

  • You cannot add the impl later unless specialization allows it, right?
@nikomatsakis

This comment has been minimized.

Copy link
Contributor

commented Jul 25, 2019

So yes, some things I'd like to address before landing this PR:

  • Need to document pretty clearly how reservation impls are meant to be used and where they make sense. It seems like they are pretty narrowly tailored to this situation (which is fine!) but could easily be misunderstood and used by libs team in other situations where they may not apply.
  • How should reservation impls show up in rustdoc?
  • Do we want a narrowly tailored error message here to try and explain to people what's going on? Right now, I think they get an error saying that the impls overlap, but of course if they remove their impl, they will get an error. This seems like it's going to be a confusing user experience.
@nikomatsakis

This comment has been minimized.

Copy link
Contributor

commented Jul 25, 2019

Regarding a crater run: are we concerned that people are already relying on negative reasoning?

@Centril

This comment has been minimized.

Copy link
Member

commented Jul 25, 2019

it does not prevent people from adding other impls of X, including impls that overlap the reservation impl

We might want to add a knob later on to specify "how hard" to reserve, e.g banning overlap, but this seems like future work for other scenarios when this would be useful.

Need to document pretty clearly how reservation impls are meant to be used and where they make sense. It seems like they are pretty narrowly tailored to this situation (which is fine!) but could easily be misunderstood and used by libs team in other situations where they may not apply.

Seems like a good idea. I would also suggest that UI tests should be provided in the cases of reservation as a start to actually confirm what the reservation does.

  • Do we want a narrowly tailored error message here to try and explain to people what's going on? Right now, I think they get an error saying that the impls overlap, but of course if they remove their impl, they will get an error. This seems like it's going to be a confusing user experience.

Would be nice to have better diagnostics yes, but I'm also cognizant of the delay to stabilizing ! so imo it would be acceptable to leave this as future work (e.g. maybe @estebank would pick it up when a user files an issue and complains about it...). This is assuming it's not a trivial fix that takes 1 hour to write up.

@estebank

This comment has been minimized.

Copy link
Contributor

commented Jul 25, 2019

but I'm also cognizant of the delay to stabilizing ! so imo it would be acceptable to leave this as future work

An interim solution would be to minimally expand the current error with a note pointing at this or the tracking issue. As long as diagnostics for other more stablished features don't regress, it should be ok to land this on nightly, but let's cut tickets for common errors we can anticipate and see if we can get to them quickly enough that they can be shipped together. I am personally reactive on these cases, but it'd be lovely if we could avoid every time we stabilize a new feature having a subpar experience, because it is likely people will go out to check the new toy out, only to cut themselves with the sharp edges.

@cramertj

This comment has been minimized.

Copy link
Member

commented Jul 26, 2019

@nikomatsakis

Regarding a crater run: are we concerned that people are already relying on negative reasoning?

Yes, they might already assume this impl does not exist for core::convert::Infallible.

@seanmonstar

This comment has been minimized.

Copy link
Contributor

commented Jul 26, 2019

Notably, if you try to make a function like fn try_from<T>(t: T) -> Result<Foo, Bar> where Foo: TryFrom<T>, <Foo as TryFrom<T>>::Error: Into<Bar>, you'll notice that you cannot pass in a Foo, and it will tell you that the trait bound 'Bar: std::convert::From<std::convert::Infallible>' is not satisfied. To fix it, we can write that impl ourselves.

It worries me that some may have already done so, and therefore a change to a type alias of ! will suddenly break those impls.

@arielb1

This comment has been minimized.

Copy link
Contributor Author

commented Jul 27, 2019

Need to document pretty clearly how reservation impls are meant to be used and where they make sense. It seems like they are pretty narrowly tailored to this situation (which is fine!) but could easily be misunderstood and used by libs team in other situations where they may not apply.

Where do you think would be the right place to document this?

@Centril

This comment has been minimized.

Copy link
Member

commented Jul 27, 2019

Where do you think would be the right place to document this?

The rustc guide probably?

@arielb1

This comment has been minimized.

Copy link
Contributor Author

commented Jul 27, 2019

One problem I noticed with #[rustc_reservation_impl] is that it allows downstream implementations that overlap with From<!> for T in a non-ordered way, for example:

trait Uninhabitable { fn never(self) -> !; }
impl Uninhabitable for ! { fn never(self) -> !; }

struct MyType {}

// ok
impl<T> From<T> for MyType where T: Uninhabitable {
    fn from(t: T) -> Self { t.never() }
}

This would make it more difficult to implement the overlap using lattice specialization (as opposed to "overlapping marker traits"), and therefore we might want to forbid that sort of downstream impl, while allowing the From<T> for T impl.

@rust-highfive

This comment has been minimized.

Copy link
Collaborator

commented Jul 27, 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-27T19:19:44.8176350Z ##[command]git remote add origin https://github.com/rust-lang/rust
2019-07-27T19:19:44.8347416Z ##[command]git config gc.auto 0
2019-07-27T19:19:44.8423060Z ##[command]git config --get-all http.https://github.com/rust-lang/rust.extraheader
2019-07-27T19:19:44.8485628Z ##[command]git config --get-all http.proxy
2019-07-27T19:19:44.8621721Z ##[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/62661/merge:refs/remotes/pull/62661/merge
---
2019-07-27T19:20:19.2289688Z do so (now or later) by using -b with the checkout command again. Example:
2019-07-27T19:20:19.2289737Z 
2019-07-27T19:20:19.2289955Z   git checkout -b <new-branch-name>
2019-07-27T19:20:19.2289984Z 
2019-07-27T19:20:19.2290031Z HEAD is now at 0262b3fef Merge 89e14d18df1c4e7b471f20ac3df7f4b22962b5c1 into 0e9b465d729d07101b29b4d096d83edf9be82df0
2019-07-27T19:20:19.2426106Z ##[section]Starting: Collect CPU-usage statistics in the background
2019-07-27T19:20:19.2428872Z ==============================================================================
2019-07-27T19:20:19.2428950Z Task         : Bash
2019-07-27T19:20:19.2428998Z Description  : Run a Bash script on macOS, Linux, or Windows
---
2019-07-27T20:20:40.6194659Z .................................................................................................... 700/5874
2019-07-27T20:20:44.7747801Z .................................................................................................... 800/5874
2019-07-27T20:20:50.2472234Z .................................................................................................... 900/5874
2019-07-27T20:20:55.2508851Z .................................................................................................... 1000/5874
2019-07-27T20:21:00.7215240Z i...........i....................................................................................... 1100/5874
2019-07-27T20:21:04.6339813Z ..............................iiiii................................................................. 1200/5874
2019-07-27T20:21:10.6906565Z .................................................................................................... 1400/5874
2019-07-27T20:21:13.4010840Z .................................................................................................... 1500/5874
2019-07-27T20:21:17.1057946Z .................................................................................................... 1600/5874
2019-07-27T20:21:19.8149599Z .................................................................................................... 1700/5874
---
2019-07-27T20:22:33.5486663Z .................................................................................................... 3400/5874
2019-07-27T20:22:38.6769136Z .................................................................................................... 3500/5874
2019-07-27T20:22:42.7054064Z ..........................i......................................................................... 3600/5874
2019-07-27T20:22:47.0355713Z .................................................................................................... 3700/5874
2019-07-27T20:22:50.5048467Z ....ii...i..ii...................................................................................... 3800/5874
2019-07-27T20:22:59.3086632Z .................................................................................................... 4000/5874
2019-07-27T20:23:03.1886472Z ........................ii.......................................................................... 4100/5874
2019-07-27T20:23:05.5278785Z .............................................i...................................................... 4200/5874
2019-07-27T20:23:07.6008814Z .................................................................................................... 4300/5874
---
2019-07-27T20:24:31.0288345Z 
2019-07-27T20:24:31.0288791Z ---- [ui] ui/traits/reservation-impls/reservation-impl-coherence-conflict.rs stdout ----
2019-07-27T20:24:31.0288852Z diff of stderr:
2019-07-27T20:24:31.0288895Z 
2019-07-27T20:24:31.0289172Z 5    | ---------------------- first implementation here
2019-07-27T20:24:31.0289274Z 6 LL | impl<T: MyTrait> OtherTrait for T {}
2019-07-27T20:24:31.0289558Z -    |
2019-07-27T20:24:31.0289785Z -    = note: this impl is reserved
2019-07-27T20:24:31.0289839Z 10 
2019-07-27T20:24:31.0289905Z 11 error: aborting due to previous error
2019-07-27T20:24:31.0289905Z 11 error: aborting due to previous error
2019-07-27T20:24:31.0289947Z 12 
2019-07-27T20:24:31.0289973Z 
2019-07-27T20:24:31.0289998Z 
2019-07-27T20:24:31.0290061Z The actual stderr differed from the expected stderr.
2019-07-27T20:24:31.0290422Z Actual stderr saved to /checkout/obj/build/x86_64-unknown-linux-gnu/test/ui/traits/reservation-impls/reservation-impl-coherence-conflict/reservation-impl-coherence-conflict.stderr
2019-07-27T20:24:31.0290675Z To update references, rerun the tests and pass the `--bless` flag
2019-07-27T20:24:31.0291000Z To only update this specific test, also pass `--test-args traits/reservation-impls/reservation-impl-coherence-conflict.rs`
2019-07-27T20:24:31.0291083Z error: 1 errors occurred comparing output.
2019-07-27T20:24:31.0291147Z status: exit code: 1
2019-07-27T20:24:31.0291147Z status: exit code: 1
2019-07-27T20:24:31.0292116Z command: "/checkout/obj/build/x86_64-unknown-linux-gnu/stage2/bin/rustc" "/checkout/src/test/ui/traits/reservation-impls/reservation-impl-coherence-conflict.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/traits/reservation-impls/reservation-impl-coherence-conflict" "-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/traits/reservation-impls/reservation-impl-coherence-conflict/auxiliary" "-A" "unused"
2019-07-27T20:24:31.0292522Z ------------------------------------------
2019-07-27T20:24:31.0292557Z 
2019-07-27T20:24:31.0292801Z ------------------------------------------
2019-07-27T20:24:31.0292847Z stderr:
2019-07-27T20:24:31.0292847Z stderr:
2019-07-27T20:24:31.0293056Z ------------------------------------------
2019-07-27T20:24:31.0293128Z error[E0119]: conflicting implementations of trait `OtherTrait` for type `()`:
2019-07-27T20:24:31.0293426Z   --> /checkout/src/test/ui/traits/reservation-impls/reservation-impl-coherence-conflict.rs:13:1
2019-07-27T20:24:31.0293480Z    |
2019-07-27T20:24:31.0293808Z LL | impl OtherTrait for () {}
2019-07-27T20:24:31.0294103Z    | ---------------------- first implementation here
2019-07-27T20:24:31.0294154Z LL | impl<T: MyTrait> OtherTrait for T {}
2019-07-27T20:24:31.0294256Z 
2019-07-27T20:24:31.0294298Z error: aborting due to previous error
2019-07-27T20:24:31.0294327Z 
2019-07-27T20:24:31.0294593Z For more information about this error, try `rustc --explain E0119`.
---
2019-07-27T20:24:31.0296016Z thread 'main' panicked at 'Some tests failed', src/tools/compiletest/src/main.rs:535:22
2019-07-27T20:24:31.0296093Z note: run with `RUST_BACKTRACE=1` environment variable to display a backtrace.
2019-07-27T20:24:31.0296127Z 
2019-07-27T20:24:31.0296151Z 
2019-07-27T20:24:31.0297620Z 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-27T20:24:31.0297878Z 
2019-07-27T20:24:31.0297908Z 
2019-07-27T20:24:31.0297954Z failed to run: /checkout/obj/build/bootstrap/debug/bootstrap test
2019-07-27T20:24:31.0298110Z Build completed unsuccessfully in 0:56:30
2019-07-27T20:24:31.0298110Z Build completed unsuccessfully in 0:56:30
2019-07-27T20:24:31.4390883Z ##[error]Bash exited with code '1'.
2019-07-27T20:24:31.4425778Z ##[section]Starting: Checkout
2019-07-27T20:24:31.4427574Z ==============================================================================
2019-07-27T20:24:31.4427631Z Task         : Get sources
2019-07-27T20:24:31.4427699Z 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)

#[rustc_reservation_impl]
#[rustc_reservation_impl="a future version of Rust might implement `From<!>` for \
all types. \
However, it is OK to implement `From<!>` for types you own - \

This comment has been minimized.

Copy link
@cramertj

cramertj Jul 27, 2019

Member

The complexity of this error message and describing the situation to users pushes me further in the direction of thinking that we should go ahead and provide the impl<T> From<!> for T.

@arielb1 arielb1 force-pushed the arielb1:never-reserve branch from 89e14d1 to 7cf8b21 Jul 30, 2019

@rust-highfive

This comment has been minimized.

Copy link
Collaborator

commented Jul 30, 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-30T18:20:23.2778078Z ##[command]git remote add origin https://github.com/rust-lang/rust
2019-07-30T18:20:23.2962429Z ##[command]git config gc.auto 0
2019-07-30T18:20:23.3033241Z ##[command]git config --get-all http.https://github.com/rust-lang/rust.extraheader
2019-07-30T18:20:23.3085791Z ##[command]git config --get-all http.proxy
2019-07-30T18:20:23.3210533Z ##[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/62661/merge:refs/remotes/pull/62661/merge
---
2019-07-30T18:20:58.6264951Z do so (now or later) by using -b with the checkout command again. Example:
2019-07-30T18:20:58.6265006Z 
2019-07-30T18:20:58.6265232Z   git checkout -b <new-branch-name>
2019-07-30T18:20:58.6265264Z 
2019-07-30T18:20:58.6265328Z HEAD is now at 2ef7a21db Merge 7cf8b2184e0e5739295df4b060540654e8d37c1f into f690098e6d65ad7b33dc7fdefccc387806782027
2019-07-30T18:20:58.6417624Z ##[section]Starting: Collect CPU-usage statistics in the background
2019-07-30T18:20:58.6420026Z ==============================================================================
2019-07-30T18:20:58.6420075Z Task         : Bash
2019-07-30T18:20:58.6420116Z Description  : Run a Bash script on macOS, Linux, or Windows
---
2019-07-30T19:17:55.2380707Z .................................................................................................... 1400/8823
2019-07-30T19:18:00.7816855Z .................................................................................................... 1500/8823
2019-07-30T19:18:12.4969610Z ................................................................i...............i................... 1600/8823
2019-07-30T19:18:19.7570601Z .................................................................................................... 1700/8823
2019-07-30T19:18:33.4145775Z ..................................................iiiii............................................. 1800/8823
2019-07-30T19:18:43.6788391Z .................................................................................................... 2000/8823
2019-07-30T19:18:45.9856715Z .................................................................................................... 2100/8823
2019-07-30T19:18:49.2696542Z .................................................................................................... 2200/8823
2019-07-30T19:18:55.4666338Z .................................................................................................... 2300/8823
---
2019-07-30T19:22:35.2349801Z .................................................................................................... 5300/8823
2019-07-30T19:22:42.1837625Z ..............i..................................................................................... 5400/8823
2019-07-30T19:22:47.4337488Z .................................................................................................... 5500/8823
2019-07-30T19:22:58.9310912Z .................................................................................................... 5600/8823
2019-07-30T19:23:11.4993198Z ........ii...i..ii...........i...................................................................... 5700/8823
2019-07-30T19:23:27.3970122Z .................................................................................................... 5900/8823
2019-07-30T19:23:32.0563276Z .................................................................................................... 6000/8823
2019-07-30T19:23:32.0563276Z .................................................................................................... 6000/8823
2019-07-30T19:23:45.1277620Z .........i..ii...................................................................................... 6100/8823
2019-07-30T19:24:02.8051787Z ....................................................i............................................... 6300/8823
2019-07-30T19:24:04.7203287Z .................................................................................................... 6400/8823
2019-07-30T19:24:06.9417609Z ......................i............................................................................. 6500/8823
2019-07-30T19:24:11.2260793Z .................................................................................................... 6600/8823
---
2019-07-30T19:28:30.6899306Z  finished in 21.201
2019-07-30T19:28:30.7061545Z Check compiletest suite=codegen mode=codegen (x86_64-unknown-linux-gnu -> x86_64-unknown-linux-gnu)
2019-07-30T19:28:30.8607667Z 
2019-07-30T19:28:30.8608731Z running 146 tests
2019-07-30T19:28:33.8650108Z i....iii......iii..iiii....i............................i..i................i....i.........ii.i.i..i 100/146
2019-07-30T19:28:35.5802441Z iii..............i.........iii.i......ii......
2019-07-30T19:28:35.5805282Z 
2019-07-30T19:28:35.5808842Z  finished in 4.874
2019-07-30T19:28:35.5969370Z Check compiletest suite=codegen-units mode=codegen-units (x86_64-unknown-linux-gnu -> x86_64-unknown-linux-gnu)
2019-07-30T19:28:35.7416036Z 
---
2019-07-30T19:28:37.6566796Z  finished in 2.059
2019-07-30T19:28:37.6732639Z Check compiletest suite=assembly mode=assembly (x86_64-unknown-linux-gnu -> x86_64-unknown-linux-gnu)
2019-07-30T19:28:37.8162389Z 
2019-07-30T19:28:37.8162809Z running 9 tests
2019-07-30T19:28:37.8163737Z iiiiiiiii
2019-07-30T19:28:37.8164273Z 
2019-07-30T19:28:37.8169593Z  finished in 0.143
2019-07-30T19:28:37.8364594Z Check compiletest suite=incremental mode=incremental (x86_64-unknown-linux-gnu -> x86_64-unknown-linux-gnu)
2019-07-30T19:28:37.9877221Z 
---
2019-07-30T19:28:55.0176257Z  finished in 17.181
2019-07-30T19:28:55.0351546Z Check compiletest suite=debuginfo mode=debuginfo-gdb+lldb (x86_64-unknown-linux-gnu -> x86_64-unknown-linux-gnu)
2019-07-30T19:28:55.1828755Z 
2019-07-30T19:28:55.1828974Z running 122 tests
2019-07-30T19:29:17.3985701Z .iiiii...i.....i..i...i..i.i.i..i.ii..i.i.....i..i....i..........iiii..........i...ii...i.......ii.i 100/122
2019-07-30T19:29:21.7005967Z .i.i......iii.i.....ii
2019-07-30T19:29:21.7006459Z 
2019-07-30T19:29:21.7006502Z  finished in 26.665
2019-07-30T19:29:21.7010289Z Uplifting stage1 rustc (x86_64-unknown-linux-gnu -> x86_64-unknown-linux-gnu)
2019-07-30T19:29:21.7010838Z Copying stage2 rustc from stage1 (x86_64-unknown-linux-gnu -> x86_64-unknown-linux-gnu / x86_64-unknown-linux-gnu)
---
2019-07-30T19:42:25.5518257Z 
2019-07-30T19:42:25.5518983Z    Doc-tests core
2019-07-30T19:42:29.2676189Z 
2019-07-30T19:42:29.2677005Z running 2376 tests
2019-07-30T19:42:40.8979238Z ......iiiii......................................................................................... 100/2376
2019-07-30T19:43:05.5070416Z ............................................................................................i....... 300/2376
2019-07-30T19:43:20.1533643Z .................................................................................................... 400/2376
2019-07-30T19:43:20.1533643Z .................................................................................................... 400/2376
2019-07-30T19:43:30.4443302Z ...........................i..i.................iiii................................................ 500/2376
2019-07-30T19:43:52.4509655Z .................................................................................................... 700/2376
2019-07-30T19:44:03.5932094Z .................................................................................................... 800/2376
2019-07-30T19:44:14.7383269Z .................................................................................................... 900/2376
2019-07-30T19:44:25.8090354Z .................................................................................................... 1000/2376
---
2019-07-30T19:49:21.8102012Z 
2019-07-30T19:49:21.8102464Z running 989 tests
2019-07-30T19:49:44.0729843Z i................................................................................................... 100/989
2019-07-30T19:49:56.7854902Z .................................................................................................... 200/989
2019-07-30T19:50:05.1546534Z .................iii......i......i...i......i....................................................... 300/989
2019-07-30T19:50:09.5713430Z .................................................................................................... 400/989
2019-07-30T19:50:17.2787797Z ................................i..i.................................ii............................. 500/989
2019-07-30T19:50:31.3910682Z .................................................................................................... 700/989
2019-07-30T19:50:31.3910682Z .................................................................................................... 700/989
2019-07-30T19:50:39.4186709Z ...............iiii................................................................................. 800/989
2019-07-30T19:50:53.2027720Z .................................................................................................... 900/989
2019-07-30T19:51:00.4262108Z .....................................iiii................................................
2019-07-30T19:51:00.4263019Z 
2019-07-30T19:51:00.4450061Z  finished in 226.852
2019-07-30T19:51:00.4470780Z Testing unwind stage1 (x86_64-unknown-linux-gnu -> x86_64-unknown-linux-gnu)
2019-07-30T19:51:00.6416110Z     Finished release [optimized] target(s) in 0.19s
---
2019-07-30T20:08:41.2966195Z Rustbook (x86_64-unknown-linux-gnu) - edition-guide
2019-07-30T20:08:41.6147712Z Building stage0 tool linkchecker (x86_64-unknown-linux-gnu)
2019-07-30T20:08:41.7871375Z    Compiling linkchecker v0.1.0 (/checkout/src/tools/linkchecker)
2019-07-30T20:08:43.6667614Z     Finished release [optimized] target(s) in 2.04s
2019-07-30T20:08:44.5168248Z std/convert/trait.TryFrom.html:22: broken link - std/convert/enum.Infallible.html
2019-07-30T20:08:44.5168535Z std/convert/trait.TryFrom.html:23: broken link - std/convert/enum.Infallible.html
2019-07-30T20:08:50.0982738Z core/convert/trait.TryFrom.html:22: broken link - core/convert/enum.Infallible.html
2019-07-30T20:08:50.0984040Z core/convert/trait.TryFrom.html:23: broken link - core/convert/enum.Infallible.html
2019-07-30T20:08:50.8737468Z thread 'main' panicked at 'found some broken links', src/tools/linkchecker/main.rs:39:9
2019-07-30T20:08:50.8746508Z 
2019-07-30T20:08:50.8746586Z 
2019-07-30T20:08:50.8747107Z command did not execute successfully: "/checkout/obj/build/x86_64-unknown-linux-gnu/stage0-tools-bin/linkchecker" "/checkout/obj/build/x86_64-unknown-linux-gnu/doc"
2019-07-30T20:08:50.8747177Z expected success, got: exit code: 101
2019-07-30T20:08:50.8747177Z expected success, got: exit code: 101
2019-07-30T20:08:50.8747239Z 
2019-07-30T20:08:50.8747264Z 
2019-07-30T20:08:50.8754914Z failed to run: /checkout/obj/build/bootstrap/debug/bootstrap test
2019-07-30T20:08:50.8755181Z Build completed unsuccessfully in 1:41:57
2019-07-30T20:08:53.5636865Z ##[error]Bash exited with code '1'.
2019-07-30T20:08:53.5668802Z ##[section]Starting: Checkout
2019-07-30T20:08:53.5670245Z ==============================================================================
2019-07-30T20:08:53.5670303Z Task         : Get sources
2019-07-30T20:08:53.5670458Z 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)

@arielb1 arielb1 force-pushed the arielb1:never-reserve branch from 7cf8b21 to 151691f Jul 31, 2019

@bors

This comment has been minimized.

Copy link
Contributor

commented Aug 2, 2019

☔️ The latest upstream changes (presumably #63214) made this pull request unmergeable. Please resolve the merge conflicts.

@arielb1 arielb1 force-pushed the arielb1:never-reserve branch from 151691f to 4e437d6 Aug 3, 2019

@nikomatsakis

This comment has been minimized.

Copy link
Contributor

commented Aug 5, 2019

@cramertj

Yes, they might already assume this impl does not exist for core::convert::Infallible.

ok, right, duh. I was only thinking of the core mechanism.

@nikomatsakis

This comment has been minimized.

Copy link
Contributor

commented Aug 5, 2019

@bors try -- well, shall we attempt the crater run then?

@bors

This comment has been minimized.

Copy link
Contributor

commented Aug 5, 2019

⌛️ Trying commit 4e437d6 with merge a0236b7...

bors added a commit that referenced this pull request Aug 5, 2019

Auto merge of #62661 - arielb1:never-reserve, r=<try>
reserve `impl<T> From<!> for T`

this is necessary for never-type stabilization.

cc #57012 #35121

I think we wanted a crater run for this @nikomatsakis?

r? @nikomatsakis
@bors

This comment has been minimized.

Copy link
Contributor

commented Aug 5, 2019

☀️ Try build successful - checks-azure
Build commit: a0236b7

@Centril

This comment has been minimized.

Copy link
Member

commented Aug 6, 2019

@craterbot run mode=check-only

@craterbot

This comment has been minimized.

Copy link
Collaborator

commented Aug 6, 2019

👌 Experiment pr-62661 created and queued.
🤖 Automatically detected try build a0236b7
🔍 You can check out the queue and this experiment's details.

ℹ️ Crater is a tool to run experiments across parts of the Rust ecosystem. Learn more

@Centril

This comment has been minimized.

Copy link
Member

commented Aug 13, 2019

@craterbot

This comment has been minimized.

Copy link
Collaborator

commented Aug 13, 2019

📝 Configuration of the pr-62661 experiment changed.

ℹ️ Crater is a tool to run experiments across parts of the Rust ecosystem. Learn more

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