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

Stabilise exhaustive patterns feature #110105

Closed
wants to merge 9 commits into from

Conversation

cjgillot
Copy link
Contributor

@cjgillot cjgillot commented Apr 9, 2023

Stabilisation report

This feature allows to omit visibly uninhabited patterns from a match.

fn main() {
  let x: Result<u8, !> = Ok(5);
  match x {
    Ok(y) => y,
    // no need to add a `Err` pattern, as `!` is uninhabited.
  }
}

This omission is only possible when the types are visibly uninhabited at the use point, ie. only if the uninhabitedness comes from a field that is accessible. As a drive-by this PR adds a note explaining this design choice.
Fixes #104034

The relevant tests are in tests/ui/pattern.

I am not aware of any unresolved questions.

@rustbot
Copy link
Collaborator

rustbot commented Apr 9, 2023

r? @lcnr

(rustbot has picked a reviewer for you, use r? to override)

@rustbot rustbot added S-waiting-on-review Status: Awaiting review from the assignee but also interested parties. T-compiler Relevant to the compiler team, which will review and decide on the PR/issue. T-libs Relevant to the library team, which will review and decide on the PR/issue. labels Apr 9, 2023
@rustbot
Copy link
Collaborator

rustbot commented Apr 9, 2023

Hey! It looks like you've submitted a new PR for the library teams!

If this PR contains changes to any rust-lang/rust public library APIs then please comment with @rustbot label +T-libs-api -T-libs to tag it appropriately. If this PR contains changes to any unstable APIs please edit the PR description to add a link to the relevant API Change Proposal or create one if you haven't already. If you're unsure where your change falls no worries, just leave it as is and the reviewer will take a look and make a decision to forward on if necessary.

Examples of T-libs-api changes:

  • Stabilizing library features
  • Introducing insta-stable changes such as new implementations of existing stable traits on existing stable types
  • Introducing new or changing existing unstable library APIs (excluding permanently unstable features / features without a tracking issue)
  • Changing public documentation in ways that create new stability guarantees
  • Changing observable runtime behavior of library APIs

The Miri subtree was changed

cc @rust-lang/miri

Some changes occurred in src/tools/clippy

cc @rust-lang/clippy

@cjgillot cjgillot added the F-exhaustive_patterns `#![feature(exhaustive_patterns)]` label Apr 9, 2023
@Noratrieb Noratrieb added the T-lang Relevant to the language team, which will review and decide on the PR/issue. label Apr 9, 2023
@rust-log-analyzer

This comment has been minimized.

@fmease
Copy link
Member

fmease commented Apr 9, 2023

I am not aware of any unresolved questions.

Not sure if it still relevant but as far as I am aware the concern raised in http://smallcultfollowing.com/babysteps/blog/2018/08/13/never-patterns-exhaustive-matching-and-uninhabited-types-oh-my/ hasn't been addressed.

@rust-log-analyzer

This comment has been minimized.

@oli-obk oli-obk self-assigned this Apr 9, 2023
@oli-obk

This comment was marked as resolved.

@cjgillot
Copy link
Contributor Author

cjgillot commented Apr 9, 2023

I am not aware of any unresolved questions.

Not sure if it still relevant but as far as I am aware the concern raised in http://smallcultfollowing.com/babysteps/blog/2018/08/13/never-patterns-exhaustive-matching-and-uninhabited-types-oh-my/ hasn't been addressed.

The rules around UB have matured since that blog post has been written, so I'm not sure where the concern lies any more. @nikomatsakis does this concern still stand?

I would like to evaluate how this feature interacts with constants used in patterns. I don't expect any issues, but I want to make sure we're not adding more edge cases to the const pattern logic

The logic here is purely type-based, so there should not be any interaction. What do you have in mind?

@oli-obk

This comment was marked as resolved.

@rust-log-analyzer

This comment has been minimized.

@varkor
Copy link
Member

varkor commented Apr 9, 2023

Could you leave a comment on the tracking issue responding to the blocking issues mentioned in #51085 (comment)?

cc @Nadrieril

@Nadrieril Nadrieril added the A-exhaustiveness-checking Relating to exhaustiveness / usefulness checking of patterns label Apr 10, 2023
@nikomatsakis
Copy link
Contributor

nikomatsakis commented Apr 10, 2023

@cjgillot

The rules around UB have matured since that blog post has been written

As far as I know, the questions raised in that post (referenced by this comment) are still relevant and have not been resolved. @rust-lang/opsem is probably better positioned to judge whether this stabilization makes those questions any easier or harder. I can try to bring that stuff back into cache if they don't weigh in. =)

@RalfJung
Copy link
Member

Right, specifically the interesting questions involve pointer indirections: given x: &!, does this PR let one write match x {}? Operationally speaking, where exactly does the UB come from if that piece of code is ever executed?

Similar with x: *const ! and match *x {}: conceptually this match merely creates a place without ever looking at it (it is the match arms that might do the "looking", but there are no arms here), so it is far from clear where UB would come from here. That's why the blog post proposes match *x { ! }, where the ! is the match arm that makes the "looking" part explicit and hence explains where the UB comes from.

@cjgillot
Copy link
Contributor Author

It references are not considered uninhabited, so the 'x: &!' case is not allowed.

As for the "what does the looking", MIR building introduces a fake read before the unreachable terminator for precisely this reason. So the '!' arm is the whitespace between the last explicit arm and the closing brace.

https://rust-lang.zulipchat.com/#narrow/stream/136281-t-opsem/topic/Soundness.20of.20.60exhaustive_patterns.60 might be an easier place to discuss this.

@RalfJung
Copy link
Member

It references are not considered uninhabited, so the 'x: &!' case is not allowed.

Oh, okay. That should be documented clearly and covered by tests to ensure this will not be changed with some drive-by PR in the future.

If inhabitedness never recurses below pointer indirections, so at least on first thought I think this does not have the issues that were discussed in the blog post.

As for the "what does the looking", MIR building introduces a fake read before the unreachable terminator for precisely this reason. So the '!' arm is the whitespace between the last explicit arm and the closing brace.

When and where exactly such a fake read is introduced is not entirely clear though. E.g. arguably match *x { _ => {} } should not have a 'fake read' and should only assert that the place itself exists.

@Nadrieril
Copy link
Member

references are not considered uninhabited, so the 'x: &!' case is not allowed.

Well, &! is technically considered inhabited atm, but pattern-matching usually looks into references. E.g. as a user I expect that matching on x: &Result<T, !> and x.as_ref(): Result<&T, &!> should have the same number of arms.

arguably match *x { _ => {} } should not have a 'fake read' and should only assert that the place itself exists.

With exhaustive_patterns, the branch in match *x { _ => {} } will be warned to be unreachable. If both match *x {} and match *x { _ => {} } make sense but do something different, that's unfortunate.

conceptually this match merely creates a place without ever looking at it

How do we make sense of "creating a place for a value of type !? Layout-wise there can be no such thing right?

@RalfJung
Copy link
Member

If both match *x {} and match *x { _ => {} } make sense but do something different, that's unfortunate.

That is definitely the case: The former generates an Unreachable terminator, the latter is a NOP.

How do we make sense of "creating a place for a value of type !? Layout-wise there can be no such thing right?

Why not? It's a regular ZST, layout-wise. In fact eventually we probably want addr_of!(*ptr) on ptr: *const ! to be allowed, so constructing such a place can then happen in well-defined programs.

@cjgillot
Copy link
Contributor Author

For &!, I'm not sure I understand why this is tricky. If we were to declare &! as uninhabited, then matching on a &! would omit the arm because the &! is uninhabited, without trying to dereference it. The uninhabitedness would come from the impossibility to create a &!, wouldn't it? But that's more of a theoretical point, and out of the scope of this PR.

For now, this test exists: https://github.com/rust-lang/rust/blob/master/tests/ui/pattern/usefulness/always-inhabited-union-ref.rs

This does not apply to *const ! which is inhabited by dangling pointers.

When and where exactly such a fake read is introduced is not entirely clear though. E.g. arguably match *x { _ => {} } should not have a 'fake read' and should only assert that the place itself exists.

We currently emit a fakeread of the scrutinee in all cases. #103208 would restrict the fakeread to the branch with an unreachable terminator only.

@Nadrieril
Copy link
Member

That is definitely the case: The former generates an Unreachable terminator, the latter is a NOP.

Then we need to fix the exhaustiveness checker to accept both somehow. Presumably match *x { _ => {} } should be marked as unreachable unless around unsafe code, right?

Why not? It's a regular ZST, layout-wise. In fact eventually we probably want addr_of!(*ptr) on ptr: *const ! to be allowed, so constructing such a place can then happen in well-defined programs.

That's unsettling. I would expect that for consistency we need ! to behave pretty differently than a ZST. Intuitively the only possible *const ! should be the null pointer or something. I imagine generic code might force us to treat it like a ZST anyway? Are we sure that's consistent?

@asquared31415
Copy link
Contributor

All *const ! must be valid to have, since we say that you can make whatever pointers you want safely, it's only operations on them that might be unsafe. 500 as *const ! is safe code, so we can't say that only the null pointer is valid for *const !.

@RalfJung
Copy link
Member

Furthermore, is is a frequent request to make addr_of!(*ptr) allowed for all pointers. Many people find the current rules, where this is sometimes UB, to be unintuitive.

And having match *x { _ => {} } (or let _ = *x) be UB when addr_of!(*x) is allowed would be very hard to rationalize. Both create a place, and then either throw it away or turn it into a raw pointer (the latter being an always allowed operation).

@JakobDegen
Copy link
Contributor

In addition to the example I just shared in #103208 , @RalfJung's claim that

If there is no Deref projection then there must already have been UB earlier

also seems wrong in at least one other case:

union U {
    a: (),
    b: !,
}

let x: U = U { a: () };

match x.b {
    _ if {
        println!("Executed match!");
        loop {}
    } => (),
}

This also compiles today and is presumably not UB.

I don't understand this PR well enough yet to know if this is a problem.

@RalfJung
Copy link
Member

RalfJung commented May 9, 2023

Ah right, I forgot about union fields.

@bors
Copy link
Contributor

bors commented May 11, 2023

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

@bors bors added the S-waiting-on-author Status: This is awaiting some action (such as code changes or more information) from the author. label May 11, 2023
@cjgillot cjgillot removed the S-waiting-on-fcp Status: PR is in FCP and is awaiting for FCP to complete. label Jun 24, 2023
@cjgillot
Copy link
Contributor Author

In addition to the example I just shared in #103208 , @RalfJung's claim that

If there is no Deref projection then there must already have been UB earlier

also seems wrong in at least one other case:

union U {
    a: (),
    b: !,
}

let x: U = U { a: () };

match x.b {
    _ if {
        println!("Executed match!");
        loop {}
    } => (),
}

This also compiles today and is presumably not UB.

I don't understand this PR well enough yet to know if this is a problem.

@JakobDegen This PR does not change the behaviour of that code, but introduces a spurious "unreachable pattern" warning on the _.

@rust-log-analyzer

This comment has been minimized.

@rust-log-analyzer

This comment has been minimized.

@bors
Copy link
Contributor

bors commented Jun 28, 2023

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

@rust-log-analyzer
Copy link
Collaborator

The job x86_64-gnu-llvm-14 failed! Check out the build log: (web) (plain)

Click to see the possible cause of the failure (guessed by this bot)
failures:

---- [ui] tests/ui/sized/recursive-type-2.rs stdout ----

error: test compilation failed although it shouldn't!
status: signal: 11 (SIGSEGV) (core dumped)
command: "/checkout/obj/build/x86_64-unknown-linux-gnu/stage2/bin/rustc" "/checkout/tests/ui/sized/recursive-type-2.rs" "-Zthreads=1" "-Zsimulate-remapped-rust-src-base=/rustc/FAKE_PREFIX" "-Ztranslate-remapped-path-to-local-path=no" "--sysroot" "/checkout/obj/build/x86_64-unknown-linux-gnu/stage2" "--target=x86_64-unknown-linux-gnu" "--error-format" "json" "--json" "future-incompat" "-Ccodegen-units=1" "-Zui-testing" "-Zdeduplicate-diagnostics=no" "-Cstrip=debuginfo" "--remap-path-prefix=/checkout/tests/ui=fake-test-src-base" "--emit" "metadata" "-C" "prefer-dynamic" "--out-dir" "/checkout/obj/build/x86_64-unknown-linux-gnu/test/ui/sized/recursive-type-2" "-A" "unused" "-Crpath" "-Cdebuginfo=0" "-Lnative=/checkout/obj/build/x86_64-unknown-linux-gnu/native/rust-test-helpers" "-L" "/checkout/obj/build/x86_64-unknown-linux-gnu/test/ui/sized/recursive-type-2/auxiliary"
stdout: none
--- stderr -------------------------------
/checkout/obj/build/x86_64-unknown-linux-gnu/stage2/lib/librustc_driver-f8a3c507cca2e6ef.so(+0xc4c443)[0x7f8d55c84443]
/lib/x86_64-linux-gnu/libc.so.6(+0x42520)[0x7f8d54c92520]
/checkout/obj/build/x86_64-unknown-linux-gnu/stage2/lib/librustc_driver-f8a3c507cca2e6ef.so(+0x38ac4ac)[0x7f8d588e44ac]
/checkout/obj/build/x86_64-unknown-linux-gnu/stage2/lib/librustc_driver-f8a3c507cca2e6ef.so(+0x399dc0b)[0x7f8d589d5c0b]
/checkout/obj/build/x86_64-unknown-linux-gnu/stage2/lib/librustc_driver-f8a3c507cca2e6ef.so(+0x3987bc4)[0x7f8d589bfbc4]
/checkout/obj/build/x86_64-unknown-linux-gnu/stage2/lib/librustc_driver-f8a3c507cca2e6ef.so(+0x3953848)[0x7f8d5898b848]
/checkout/obj/build/x86_64-unknown-linux-gnu/stage2/lib/librustc_driver-f8a3c507cca2e6ef.so(+0x39538de)[0x7f8d5898b8de]
/checkout/obj/build/x86_64-unknown-linux-gnu/stage2/lib/librustc_driver-f8a3c507cca2e6ef.so(+0x3953914)[0x7f8d5898b914]
/checkout/obj/build/x86_64-unknown-linux-gnu/stage2/lib/librustc_driver-f8a3c507cca2e6ef.so(+0x39538de)[0x7f8d5898b8de]
/checkout/obj/build/x86_64-unknown-linux-gnu/stage2/lib/librustc_driver-f8a3c507cca2e6ef.so(+0x3953914)[0x7f8d5898b914]
/checkout/obj/build/x86_64-unknown-linux-gnu/stage2/lib/librustc_driver-f8a3c507cca2e6ef.so(+0x39538de)[0x7f8d5898b8de]
/checkout/obj/build/x86_64-unknown-linux-gnu/stage2/lib/librustc_driver-f8a3c507cca2e6ef.so(+0x3953914)[0x7f8d5898b914]
/checkout/obj/build/x86_64-unknown-linux-gnu/stage2/lib/librustc_driver-f8a3c507cca2e6ef.so(+0x39538de)[0x7f8d5898b8de]
/checkout/obj/build/x86_64-unknown-linux-gnu/stage2/lib/librustc_driver-f8a3c507cca2e6ef.so(+0x3953914)[0x7f8d5898b914]
/checkout/obj/build/x86_64-unknown-linux-gnu/stage2/lib/librustc_driver-f8a3c507cca2e6ef.so(+0x39538de)[0x7f8d5898b8de]
/checkout/obj/build/x86_64-unknown-linux-gnu/stage2/lib/librustc_driver-f8a3c507cca2e6ef.so(+0x3953914)[0x7f8d5898b914]
/checkout/obj/build/x86_64-unknown-linux-gnu/stage2/lib/librustc_driver-f8a3c507cca2e6ef.so(+0x39538de)[0x7f8d5898b8de]
/checkout/obj/build/x86_64-unknown-linux-gnu/stage2/lib/librustc_driver-f8a3c507cca2e6ef.so(+0x3953914)[0x7f8d5898b914]
/checkout/obj/build/x86_64-unknown-linux-gnu/stage2/lib/librustc_driver-f8a3c507cca2e6ef.so(+0x39538de)[0x7f8d5898b8de]
/checkout/obj/build/x86_64-unknown-linux-gnu/stage2/lib/librustc_driver-f8a3c507cca2e6ef.so(+0x3953914)[0x7f8d5898b914]
/checkout/obj/build/x86_64-unknown-linux-gnu/stage2/lib/librustc_driver-f8a3c507cca2e6ef.so(+0x39538de)[0x7f8d5898b8de]
/checkout/obj/build/x86_64-unknown-linux-gnu/stage2/lib/librustc_driver-f8a3c507cca2e6ef.so(+0x3953914)[0x7f8d5898b914]
/checkout/obj/build/x86_64-unknown-linux-gnu/stage2/lib/librustc_driver-f8a3c507cca2e6ef.so(+0x39538de)[0x7f8d5898b8de]
/checkout/obj/build/x86_64-unknown-linux-gnu/stage2/lib/librustc_driver-f8a3c507cca2e6ef.so(+0x3953914)[0x7f8d5898b914]
/checkout/obj/build/x86_64-unknown-linux-gnu/stage2/lib/librustc_driver-f8a3c507cca2e6ef.so(+0x39538de)[0x7f8d5898b8de]
/checkout/obj/build/x86_64-unknown-linux-gnu/stage2/lib/librustc_driver-f8a3c507cca2e6ef.so(+0x3953914)[0x7f8d5898b914]
/checkout/obj/build/x86_64-unknown-linux-gnu/stage2/lib/librustc_driver-f8a3c507cca2e6ef.so(+0x39538de)[0x7f8d5898b8de]
/checkout/obj/build/x86_64-unknown-linux-gnu/stage2/lib/librustc_driver-f8a3c507cca2e6ef.so(+0x3953914)[0x7f8d5898b914]
/checkout/obj/build/x86_64-unknown-linux-gnu/stage2/lib/librustc_driver-f8a3c507cca2e6ef.so(+0x39538de)[0x7f8d5898b8de]
/checkout/obj/build/x86_64-unknown-linux-gnu/stage2/lib/librustc_driver-f8a3c507cca2e6ef.so(+0x3953914)[0x7f8d5898b914]
/checkout/obj/build/x86_64-unknown-linux-gnu/stage2/lib/librustc_driver-f8a3c507cca2e6ef.so(+0x39538de)[0x7f8d5898b8de]
/checkout/obj/build/x86_64-unknown-linux-gnu/stage2/lib/librustc_driver-f8a3c507cca2e6ef.so(+0x3953914)[0x7f8d5898b914]
/checkout/obj/build/x86_64-unknown-linux-gnu/stage2/lib/librustc_driver-f8a3c507cca2e6ef.so(+0x39538de)[0x7f8d5898b8de]
/checkout/obj/build/x86_64-unknown-linux-gnu/stage2/lib/librustc_driver-f8a3c507cca2e6ef.so(+0x3953914)[0x7f8d5898b914]
/checkout/obj/build/x86_64-unknown-linux-gnu/stage2/lib/librustc_driver-f8a3c507cca2e6ef.so(+0x39538de)[0x7f8d5898b8de]
/checkout/obj/build/x86_64-unknown-linux-gnu/stage2/lib/librustc_driver-f8a3c507cca2e6ef.so(+0x3953914)[0x7f8d5898b914]
/checkout/obj/build/x86_64-unknown-linux-gnu/stage2/lib/librustc_driver-f8a3c507cca2e6ef.so(+0x39538de)[0x7f8d5898b8de]
/checkout/obj/build/x86_64-unknown-linux-gnu/stage2/lib/librustc_driver-f8a3c507cca2e6ef.so(+0x3953914)[0x7f8d5898b914]
/checkout/obj/build/x86_64-unknown-linux-gnu/stage2/lib/librustc_driver-f8a3c507cca2e6ef.so(+0x39538de)[0x7f8d5898b8de]
/checkout/obj/build/x86_64-unknown-linux-gnu/stage2/lib/librustc_driver-f8a3c507cca2e6ef.so(+0x3953914)[0x7f8d5898b914]
/checkout/obj/build/x86_64-unknown-linux-gnu/stage2/lib/librustc_driver-f8a3c507cca2e6ef.so(+0x39538de)[0x7f8d5898b8de]
/checkout/obj/build/x86_64-unknown-linux-gnu/stage2/lib/librustc_driver-f8a3c507cca2e6ef.so(+0x3953914)[0x7f8d5898b914]
/checkout/obj/build/x86_64-unknown-linux-gnu/stage2/lib/librustc_driver-f8a3c507cca2e6ef.so(+0x39538de)[0x7f8d5898b8de]
/checkout/obj/build/x86_64-unknown-linux-gnu/stage2/lib/librustc_driver-f8a3c507cca2e6ef.so(+0x3953914)[0x7f8d5898b914]
/checkout/obj/build/x86_64-unknown-linux-gnu/stage2/lib/librustc_driver-f8a3c507cca2e6ef.so(+0x39538de)[0x7f8d5898b8de]
/checkout/obj/build/x86_64-unknown-linux-gnu/stage2/lib/librustc_driver-f8a3c507cca2e6ef.so(+0x3953914)[0x7f8d5898b914]
/checkout/obj/build/x86_64-unknown-linux-gnu/stage2/lib/librustc_driver-f8a3c507cca2e6ef.so(+0x39538de)[0x7f8d5898b8de]
/checkout/obj/build/x86_64-unknown-linux-gnu/stage2/lib/librustc_driver-f8a3c507cca2e6ef.so(+0x3953914)[0x7f8d5898b914]
/checkout/obj/build/x86_64-unknown-linux-gnu/stage2/lib/librustc_driver-f8a3c507cca2e6ef.so(+0x39538de)[0x7f8d5898b8de]
/checkout/obj/build/x86_64-unknown-linux-gnu/stage2/lib/librustc_driver-f8a3c507cca2e6ef.so(+0x3953914)[0x7f8d5898b914]
/checkout/obj/build/x86_64-unknown-linux-gnu/stage2/lib/librustc_driver-f8a3c507cca2e6ef.so(+0x39538de)[0x7f8d5898b8de]
/checkout/obj/build/x86_64-unknown-linux-gnu/stage2/lib/librustc_driver-f8a3c507cca2e6ef.so(+0x3953914)[0x7f8d5898b914]
/checkout/obj/build/x86_64-unknown-linux-gnu/stage2/lib/librustc_driver-f8a3c507cca2e6ef.so(+0x39538de)[0x7f8d5898b8de]
/checkout/obj/build/x86_64-unknown-linux-gnu/stage2/lib/librustc_driver-f8a3c507cca2e6ef.so(+0x3953914)[0x7f8d5898b914]
/checkout/obj/build/x86_64-unknown-linux-gnu/stage2/lib/librustc_driver-f8a3c507cca2e6ef.so(+0x39538de)[0x7f8d5898b8de]
/checkout/obj/build/x86_64-unknown-linux-gnu/stage2/lib/librustc_driver-f8a3c507cca2e6ef.so(+0x3953914)[0x7f8d5898b914]
/checkout/obj/build/x86_64-unknown-linux-gnu/stage2/lib/librustc_driver-f8a3c507cca2e6ef.so(+0x39538de)[0x7f8d5898b8de]
/checkout/obj/build/x86_64-unknown-linux-gnu/stage2/lib/librustc_driver-f8a3c507cca2e6ef.so(+0x3953914)[0x7f8d5898b914]
/checkout/obj/build/x86_64-unknown-linux-gnu/stage2/lib/librustc_driver-f8a3c507cca2e6ef.so(+0x39538de)[0x7f8d5898b8de]
/checkout/obj/build/x86_64-unknown-linux-gnu/stage2/lib/librustc_driver-f8a3c507cca2e6ef.so(+0x3953914)[0x7f8d5898b914]
/checkout/obj/build/x86_64-unknown-linux-gnu/stage2/lib/librustc_driver-f8a3c507cca2e6ef.so(+0x39538de)[0x7f8d5898b8de]
/checkout/obj/build/x86_64-unknown-linux-gnu/stage2/lib/librustc_driver-f8a3c507cca2e6ef.so(+0x3953914)[0x7f8d5898b914]
/checkout/obj/build/x86_64-unknown-linux-gnu/stage2/lib/librustc_driver-f8a3c507cca2e6ef.so(+0x39538de)[0x7f8d5898b8de]
/checkout/obj/build/x86_64-unknown-linux-gnu/stage2/lib/librustc_driver-f8a3c507cca2e6ef.so(+0x3953914)[0x7f8d5898b914]
/checkout/obj/build/x86_64-unknown-linux-gnu/stage2/lib/librustc_driver-f8a3c507cca2e6ef.so(+0x39538de)[0x7f8d5898b8de]
/checkout/obj/build/x86_64-unknown-linux-gnu/stage2/lib/librustc_driver-f8a3c507cca2e6ef.so(+0x3953914)[0x7f8d5898b914]
/checkout/obj/build/x86_64-unknown-linux-gnu/stage2/lib/librustc_driver-f8a3c507cca2e6ef.so(+0x39538de)[0x7f8d5898b8de]
/checkout/obj/build/x86_64-unknown-linux-gnu/stage2/lib/librustc_driver-f8a3c507cca2e6ef.so(+0x3953914)[0x7f8d5898b914]
/checkout/obj/build/x86_64-unknown-linux-gnu/stage2/lib/librustc_driver-f8a3c507cca2e6ef.so(+0x39538de)[0x7f8d5898b8de]
/checkout/obj/build/x86_64-unknown-linux-gnu/stage2/lib/librustc_driver-f8a3c507cca2e6ef.so(+0x3953914)[0x7f8d5898b914]
/checkout/obj/build/x86_64-unknown-linux-gnu/stage2/lib/librustc_driver-f8a3c507cca2e6ef.so(+0x39538de)[0x7f8d5898b8de]
/checkout/obj/build/x86_64-unknown-linux-gnu/stage2/lib/librustc_driver-f8a3c507cca2e6ef.so(+0x3953914)[0x7f8d5898b914]
/checkout/obj/build/x86_64-unknown-linux-gnu/stage2/lib/librustc_driver-f8a3c507cca2e6ef.so(+0x39538de)[0x7f8d5898b8de]
/checkout/obj/build/x86_64-unknown-linux-gnu/stage2/lib/librustc_driver-f8a3c507cca2e6ef.so(+0x3953914)[0x7f8d5898b914]
/checkout/obj/build/x86_64-unknown-linux-gnu/stage2/lib/librustc_driver-f8a3c507cca2e6ef.so(+0x39538de)[0x7f8d5898b8de]
/checkout/obj/build/x86_64-unknown-linux-gnu/stage2/lib/librustc_driver-f8a3c507cca2e6ef.so(+0x3953914)[0x7f8d5898b914]
/checkout/obj/build/x86_64-unknown-linux-gnu/stage2/lib/librustc_driver-f8a3c507cca2e6ef.so(+0x39538de)[0x7f8d5898b8de]
/checkout/obj/build/x86_64-unknown-linux-gnu/stage2/lib/librustc_driver-f8a3c507cca2e6ef.so(+0x3953914)[0x7f8d5898b914]
/checkout/obj/build/x86_64-unknown-linux-gnu/stage2/lib/librustc_driver-f8a3c507cca2e6ef.so(+0x39538de)[0x7f8d5898b8de]
/checkout/obj/build/x86_64-unknown-linux-gnu/stage2/lib/librustc_driver-f8a3c507cca2e6ef.so(+0x3953914)[0x7f8d5898b914]
/checkout/obj/build/x86_64-unknown-linux-gnu/stage2/lib/librustc_driver-f8a3c507cca2e6ef.so(+0x39538de)[0x7f8d5898b8de]
/checkout/obj/build/x86_64-unknown-linux-gnu/stage2/lib/librustc_driver-f8a3c507cca2e6ef.so(+0x3953914)[0x7f8d5898b914]
/checkout/obj/build/x86_64-unknown-linux-gnu/stage2/lib/librustc_driver-f8a3c507cca2e6ef.so(+0x39538de)[0x7f8d5898b8de]
/checkout/obj/build/x86_64-unknown-linux-gnu/stage2/lib/librustc_driver-f8a3c507cca2e6ef.so(+0x3953914)[0x7f8d5898b914]
/checkout/obj/build/x86_64-unknown-linux-gnu/stage2/lib/librustc_driver-f8a3c507cca2e6ef.so(+0x39538de)[0x7f8d5898b8de]
/checkout/obj/build/x86_64-unknown-linux-gnu/stage2/lib/librustc_driver-f8a3c507cca2e6ef.so(+0x3953914)[0x7f8d5898b914]
/checkout/obj/build/x86_64-unknown-linux-gnu/stage2/lib/librustc_driver-f8a3c507cca2e6ef.so(+0x39538de)[0x7f8d5898b8de]
/checkout/obj/build/x86_64-unknown-linux-gnu/stage2/lib/librustc_driver-f8a3c507cca2e6ef.so(+0x3953914)[0x7f8d5898b914]
/checkout/obj/build/x86_64-unknown-linux-gnu/stage2/lib/librustc_driver-f8a3c507cca2e6ef.so(+0x39538de)[0x7f8d5898b8de]
/checkout/obj/build/x86_64-unknown-linux-gnu/stage2/lib/librustc_driver-f8a3c507cca2e6ef.so(+0x3953914)[0x7f8d5898b914]
/checkout/obj/build/x86_64-unknown-linux-gnu/stage2/lib/librustc_driver-f8a3c507cca2e6ef.so(+0x39538de)[0x7f8d5898b8de]
/checkout/obj/build/x86_64-unknown-linux-gnu/stage2/lib/librustc_driver-f8a3c507cca2e6ef.so(+0x3953914)[0x7f8d5898b914]
/checkout/obj/build/x86_64-unknown-linux-gnu/stage2/lib/librustc_driver-f8a3c507cca2e6ef.so(+0x39538de)[0x7f8d5898b8de]
/checkout/obj/build/x86_64-unknown-linux-gnu/stage2/lib/librustc_driver-f8a3c507cca2e6ef.so(+0x3953914)[0x7f8d5898b914]
/checkout/obj/build/x86_64-unknown-linux-gnu/stage2/lib/librustc_driver-f8a3c507cca2e6ef.so(+0x39538de)[0x7f8d5898b8de]
/checkout/obj/build/x86_64-unknown-linux-gnu/stage2/lib/librustc_driver-f8a3c507cca2e6ef.so(+0x3953914)[0x7f8d5898b914]
/checkout/obj/build/x86_64-unknown-linux-gnu/stage2/lib/librustc_driver-f8a3c507cca2e6ef.so(+0x39538de)[0x7f8d5898b8de]
/checkout/obj/build/x86_64-unknown-linux-gnu/stage2/lib/librustc_driver-f8a3c507cca2e6ef.so(+0x3953914)[0x7f8d5898b914]
/checkout/obj/build/x86_64-unknown-linux-gnu/stage2/lib/librustc_driver-f8a3c507cca2e6ef.so(+0x39538de)[0x7f8d5898b8de]
/checkout/obj/build/x86_64-unknown-linux-gnu/stage2/lib/librustc_driver-f8a3c507cca2e6ef.so(+0x3953914)[0x7f8d5898b914]
/checkout/obj/build/x86_64-unknown-linux-gnu/stage2/lib/librustc_driver-f8a3c507cca2e6ef.so(+0x39538de)[0x7f8d5898b8de]
/checkout/obj/build/x86_64-unknown-linux-gnu/stage2/lib/librustc_driver-f8a3c507cca2e6ef.so(+0x3953914)[0x7f8d5898b914]
/checkout/obj/build/x86_64-unknown-linux-gnu/stage2/lib/librustc_driver-f8a3c507cca2e6ef.so(+0x39538de)[0x7f8d5898b8de]
/checkout/obj/build/x86_64-unknown-linux-gnu/stage2/lib/librustc_driver-f8a3c507cca2e6ef.so(+0x3953914)[0x7f8d5898b914]
/checkout/obj/build/x86_64-unknown-linux-gnu/stage2/lib/librustc_driver-f8a3c507cca2e6ef.so(+0x39538de)[0x7f8d5898b8de]
/checkout/obj/build/x86_64-unknown-linux-gnu/stage2/lib/librustc_driver-f8a3c507cca2e6ef.so(+0x3953914)[0x7f8d5898b914]
/checkout/obj/build/x86_64-unknown-linux-gnu/stage2/lib/librustc_driver-f8a3c507cca2e6ef.so(+0x39538de)[0x7f8d5898b8de]
/checkout/obj/build/x86_64-unknown-linux-gnu/stage2/lib/librustc_driver-f8a3c507cca2e6ef.so(+0x3953914)[0x7f8d5898b914]
/checkout/obj/build/x86_64-unknown-linux-gnu/stage2/lib/librustc_driver-f8a3c507cca2e6ef.so(+0x39538de)[0x7f8d5898b8de]
/checkout/obj/build/x86_64-unknown-linux-gnu/stage2/lib/librustc_driver-f8a3c507cca2e6ef.so(+0x3953914)[0x7f8d5898b914]
/checkout/obj/build/x86_64-unknown-linux-gnu/stage2/lib/librustc_driver-f8a3c507cca2e6ef.so(+0x39538de)[0x7f8d5898b8de]
/checkout/obj/build/x86_64-unknown-linux-gnu/stage2/lib/librustc_driver-f8a3c507cca2e6ef.so(+0x3953914)[0x7f8d5898b914]
/checkout/obj/build/x86_64-unknown-linux-gnu/stage2/lib/librustc_driver-f8a3c507cca2e6ef.so(+0x39538de)[0x7f8d5898b8de]
/checkout/obj/build/x86_64-unknown-linux-gnu/stage2/lib/librustc_driver-f8a3c507cca2e6ef.so(+0x3953914)[0x7f8d5898b914]
/checkout/obj/build/x86_64-unknown-linux-gnu/stage2/lib/librustc_driver-f8a3c507cca2e6ef.so(+0x39538de)[0x7f8d5898b8de]
/checkout/obj/build/x86_64-unknown-linux-gnu/stage2/lib/librustc_driver-f8a3c507cca2e6ef.so(+0x3953914)[0x7f8d5898b914]
/checkout/obj/build/x86_64-unknown-linux-gnu/stage2/lib/librustc_driver-f8a3c507cca2e6ef.so(+0x39538de)[0x7f8d5898b8de]
/checkout/obj/build/x86_64-unknown-linux-gnu/stage2/lib/librustc_driver-f8a3c507cca2e6ef.so(+0x3953914)[0x7f8d5898b914]
/checkout/obj/build/x86_64-unknown-linux-gnu/stage2/lib/librustc_driver-f8a3c507cca2e6ef.so(+0x39538de)[0x7f8d5898b8de]
/checkout/obj/build/x86_64-unknown-linux-gnu/stage2/lib/librustc_driver-f8a3c507cca2e6ef.so(+0x3953914)[0x7f8d5898b914]
/checkout/obj/build/x86_64-unknown-linux-gnu/stage2/lib/librustc_driver-f8a3c507cca2e6ef.so(+0x39538de)[0x7f8d5898b8de]
/checkout/obj/build/x86_64-unknown-linux-gnu/stage2/lib/librustc_driver-f8a3c507cca2e6ef.so(+0x3953914)[0x7f8d5898b914]
/checkout/obj/build/x86_64-unknown-linux-gnu/stage2/lib/librustc_driver-f8a3c507cca2e6ef.so(+0x39538de)[0x7f8d5898b8de]
/checkout/obj/build/x86_64-unknown-linux-gnu/stage2/lib/librustc_driver-f8a3c507cca2e6ef.so(+0x3953914)[0x7f8d5898b914]
/checkout/obj/build/x86_64-unknown-linux-gnu/stage2/lib/librustc_driver-f8a3c507cca2e6ef.so(+0x39538de)[0x7f8d5898b8de]
/checkout/obj/build/x86_64-unknown-linux-gnu/stage2/lib/librustc_driver-f8a3c507cca2e6ef.so(+0x3953914)[0x7f8d5898b914]
/checkout/obj/build/x86_64-unknown-linux-gnu/stage2/lib/librustc_driver-f8a3c507cca2e6ef.so(+0x39538de)[0x7f8d5898b8de]
/checkout/obj/build/x86_64-unknown-linux-gnu/stage2/lib/librustc_driver-f8a3c507cca2e6ef.so(+0x3953914)[0x7f8d5898b914]
/checkout/obj/build/x86_64-unknown-linux-gnu/stage2/lib/librustc_driver-f8a3c507cca2e6ef.so(+0x39538de)[0x7f8d5898b8de]
/checkout/obj/build/x86_64-unknown-linux-gnu/stage2/lib/librustc_driver-f8a3c507cca2e6ef.so(+0x3953914)[0x7f8d5898b914]
/checkout/obj/build/x86_64-unknown-linux-gnu/stage2/lib/librustc_driver-f8a3c507cca2e6ef.so(+0x39538de)[0x7f8d5898b8de]
/checkout/obj/build/x86_64-unknown-linux-gnu/stage2/lib/librustc_driver-f8a3c507cca2e6ef.so(+0x3953914)[0x7f8d5898b914]
/checkout/obj/build/x86_64-unknown-linux-gnu/stage2/lib/librustc_driver-f8a3c507cca2e6ef.so(+0x39538de)[0x7f8d5898b8de]
/checkout/obj/build/x86_64-unknown-linux-gnu/stage2/lib/librustc_driver-f8a3c507cca2e6ef.so(+0x3953914)[0x7f8d5898b914]
/checkout/obj/build/x86_64-unknown-linux-gnu/stage2/lib/librustc_driver-f8a3c507cca2e6ef.so(+0x39538de)[0x7f8d5898b8de]
/checkout/obj/build/x86_64-unknown-linux-gnu/stage2/lib/librustc_driver-f8a3c507cca2e6ef.so(+0x3953914)[0x7f8d5898b914]
/checkout/obj/build/x86_64-unknown-linux-gnu/stage2/lib/librustc_driver-f8a3c507cca2e6ef.so(+0x39538de)[0x7f8d5898b8de]
/checkout/obj/build/x86_64-unknown-linux-gnu/stage2/lib/librustc_driver-f8a3c507cca2e6ef.so(+0x3953914)[0x7f8d5898b914]
/checkout/obj/build/x86_64-unknown-linux-gnu/stage2/lib/librustc_driver-f8a3c507cca2e6ef.so(+0x39538de)[0x7f8d5898b8de]
/checkout/obj/build/x86_64-unknown-linux-gnu/stage2/lib/librustc_driver-f8a3c507cca2e6ef.so(+0x3953914)[0x7f8d5898b914]
/checkout/obj/build/x86_64-unknown-linux-gnu/stage2/lib/librustc_driver-f8a3c507cca2e6ef.so(+0x39538de)[0x7f8d5898b8de]
/checkout/obj/build/x86_64-unknown-linux-gnu/stage2/lib/librustc_driver-f8a3c507cca2e6ef.so(+0x3953914)[0x7f8d5898b914]
/checkout/obj/build/x86_64-unknown-linux-gnu/stage2/lib/librustc_driver-f8a3c507cca2e6ef.so(+0x39538de)[0x7f8d5898b8de]
/checkout/obj/build/x86_64-unknown-linux-gnu/stage2/lib/librustc_driver-f8a3c507cca2e6ef.so(+0x3953914)[0x7f8d5898b914]
/checkout/obj/build/x86_64-unknown-linux-gnu/stage2/lib/librustc_driver-f8a3c507cca2e6ef.so(+0x39538de)[0x7f8d5898b8de]
/checkout/obj/build/x86_64-unknown-linux-gnu/stage2/lib/librustc_driver-f8a3c507cca2e6ef.so(+0x3953914)[0x7f8d5898b914]
/checkout/obj/build/x86_64-unknown-linux-gnu/stage2/lib/librustc_driver-f8a3c507cca2e6ef.so(+0x39538de)[0x7f8d5898b8de]
/checkout/obj/build/x86_64-unknown-linux-gnu/stage2/lib/librustc_driver-f8a3c507cca2e6ef.so(+0x3953914)[0x7f8d5898b914]
/checkout/obj/build/x86_64-unknown-linux-gnu/stage2/lib/librustc_driver-f8a3c507cca2e6ef.so(+0x39538de)[0x7f8d5898b8de]
/checkout/obj/build/x86_64-unknown-linux-gnu/stage2/lib/librustc_driver-f8a3c507cca2e6ef.so(+0x3953914)[0x7f8d5898b914]
/checkout/obj/build/x86_64-unknown-linux-gnu/stage2/lib/librustc_driver-f8a3c507cca2e6ef.so(+0x39538de)[0x7f8d5898b8de]
/checkout/obj/build/x86_64-unknown-linux-gnu/stage2/lib/librustc_driver-f8a3c507cca2e6ef.so(+0x3953914)[0x7f8d5898b914]
/checkout/obj/build/x86_64-unknown-linux-gnu/stage2/lib/librustc_driver-f8a3c507cca2e6ef.so(+0x39538de)[0x7f8d5898b8de]
/checkout/obj/build/x86_64-unknown-linux-gnu/stage2/lib/librustc_driver-f8a3c507cca2e6ef.so(+0x3953914)[0x7f8d5898b914]
/checkout/obj/build/x86_64-unknown-linux-gnu/stage2/lib/librustc_driver-f8a3c507cca2e6ef.so(+0x39538de)[0x7f8d5898b8de]
/checkout/obj/build/x86_64-unknown-linux-gnu/stage2/lib/librustc_driver-f8a3c507cca2e6ef.so(+0x3953914)[0x7f8d5898b914]
/checkout/obj/build/x86_64-unknown-linux-gnu/stage2/lib/librustc_driver-f8a3c507cca2e6ef.so(+0x39538de)[0x7f8d5898b8de]
/checkout/obj/build/x86_64-unknown-linux-gnu/stage2/lib/librustc_driver-f8a3c507cca2e6ef.so(+0x3953914)[0x7f8d5898b914]
/checkout/obj/build/x86_64-unknown-linux-gnu/stage2/lib/librustc_driver-f8a3c507cca2e6ef.so(+0x39538de)[0x7f8d5898b8de]
/checkout/obj/build/x86_64-unknown-linux-gnu/stage2/lib/librustc_driver-f8a3c507cca2e6ef.so(+0x3953914)[0x7f8d5898b914]
/checkout/obj/build/x86_64-unknown-linux-gnu/stage2/lib/librustc_driver-f8a3c507cca2e6ef.so(+0x39538de)[0x7f8d5898b8de]
/checkout/obj/build/x86_64-unknown-linux-gnu/stage2/lib/librustc_driver-f8a3c507cca2e6ef.so(+0x3953914)[0x7f8d5898b914]
Build completed unsuccessfully in 0:10:58
/checkout/obj/build/x86_64-unknown-linux-gnu/stage2/lib/librustc_driver-f8a3c507cca2e6ef.so(+0x39538de)[0x7f8d5898b8de]
/checkout/obj/build/x86_64-unknown-linux-gnu/stage2/lib/librustc_driver-f8a3c507cca2e6ef.so(+0x3953914)[0x7f8d5898b914]
/checkout/obj/build/x86_64-unknown-linux-gnu/stage2/lib/librustc_driver-f8a3c507cca2e6ef.so(+0x39538de)[0x7f8d5898b8de]
/checkout/obj/build/x86_64-unknown-linux-gnu/stage2/lib/librustc_driver-f8a3c507cca2e6ef.so(+0x3953914)[0x7f8d5898b914]
/checkout/obj/build/x86_64-unknown-linux-gnu/stage2/lib/librustc_driver-f8a3c507cca2e6ef.so(+0x39538de)[0x7f8d5898b8de]
/checkout/obj/build/x86_64-unknown-linux-gnu/stage2/lib/librustc_driver-f8a3c507cca2e6ef.so(+0x3953914)[0x7f8d5898b914]
/checkout/obj/build/x86_64-unknown-linux-gnu/stage2/lib/librustc_driver-f8a3c507cca2e6ef.so(+0x39538de)[0x7f8d5898b8de]
/checkout/obj/build/x86_64-unknown-linux-gnu/stage2/lib/librustc_driver-f8a3c507cca2e6ef.so(+0x3953914)[0x7f8d5898b914]
/checkout/obj/build/x86_64-unknown-linux-gnu/stage2/lib/librustc_driver-f8a3c507cca2e6ef.so(+0x39538de)[0x7f8d5898b8de]
/checkout/obj/build/x86_64-unknown-linux-gnu/stage2/lib/librustc_driver-f8a3c507cca2e6ef.so(+0x3953914)[0x7f8d5898b914]
/checkout/obj/build/x86_64-unknown-linux-gnu/stage2/lib/librustc_driver-f8a3c507cca2e6ef.so(+0x39538de)[0x7f8d5898b8de]
/checkout/obj/build/x86_64-unknown-linux-gnu/stage2/lib/librustc_driver-f8a3c507cca2e6ef.so(+0x3953914)[0x7f8d5898b914]
/checkout/obj/build/x86_64-unknown-linux-gnu/stage2/lib/librustc_driver-f8a3c507cca2e6ef.so(+0x39538de)[0x7f8d5898b8de]
/checkout/obj/build/x86_64-unknown-linux-gnu/stage2/lib/librustc_driver-f8a3c507cca2e6ef.so(+0x3953914)[0x7f8d5898b914]
/checkout/obj/build/x86_64-unknown-linux-gnu/stage2/lib/librustc_driver-f8a3c507cca2e6ef.so(+0x39538de)[0x7f8d5898b8de]
/checkout/obj/build/x86_64-unknown-linux-gnu/stage2/lib/librustc_driver-f8a3c507cca2e6ef.so(+0x3953914)[0x7f8d5898b914]
/checkout/obj/build/x86_64-unknown-linux-gnu/stage2/lib/librustc_driver-f8a3c507cca2e6ef.so(+0x39538de)[0x7f8d5898b8de]
/checkout/obj/build/x86_64-unknown-linux-gnu/stage2/lib/librustc_driver-f8a3c507cca2e6ef.so(+0x3953914)[0x7f8d5898b914]
/checkout/obj/build/x86_64-unknown-linux-gnu/stage2/lib/librustc_driver-f8a3c507cca2e6ef.so(+0x39538de)[0x7f8d5898b8de]
/checkout/obj/build/x86_64-unknown-linux-gnu/stage2/lib/librustc_driver-f8a3c507cca2e6ef.so(+0x3953914)[0x7f8d5898b914]
/checkout/obj/build/x86_64-unknown-linux-gnu/stage2/lib/librustc_driver-f8a3c507cca2e6ef.so(+0x39538de)[0x7f8d5898b8de]
/checkout/obj/build/x86_64-unknown-linux-gnu/stage2/lib/librustc_driver-f8a3c507cca2e6ef.so(+0x3953914)[0x7f8d5898b914]
/checkout/obj/build/x86_64-unknown-linux-gnu/stage2/lib/librustc_driver-f8a3c507cca2e6ef.so(+0x39538de)[0x7f8d5898b8de]
/checkout/obj/build/x86_64-unknown-linux-gnu/stage2/lib/librustc_driver-f8a3c507cca2e6ef.so(+0x3953914)[0x7f8d5898b914]
/checkout/obj/build/x86_64-unknown-linux-gnu/stage2/lib/librustc_driver-f8a3c507cca2e6ef.so(+0x39538de)[0x7f8d5898b8de]
/checkout/obj/build/x86_64-unknown-linux-gnu/stage2/lib/librustc_driver-f8a3c507cca2e6ef.so(+0x3953914)[0x7f8d5898b914]
/checkout/obj/build/x86_64-unknown-linux-gnu/stage2/lib/librustc_driver-f8a3c507cca2e6ef.so(+0x39538de)[0x7f8d5898b8de]
/checkout/obj/build/x86_64-unknown-linux-gnu/stage2/lib/librustc_driver-f8a3c507cca2e6ef.so(+0x3953914)[0x7f8d5898b914]
/checkout/obj/build/x86_64-unknown-linux-gnu/stage2/lib/librustc_driver-f8a3c507cca2e6ef.so(+0x39538de)[0x7f8d5898b8de]
/checkout/obj/build/x86_64-unknown-linux-gnu/stage2/lib/librustc_driver-f8a3c507cca2e6ef.so(+0x3953914)[0x7f8d5898b914]
/checkout/obj/build/x86_64-unknown-linux-gnu/stage2/lib/librustc_driver-f8a3c507cca2e6ef.so(+0x39538de)[0x7f8d5898b8de]
/checkout/obj/build/x86_64-unknown-linux-gnu/stage2/lib/librustc_driver-f8a3c507cca2e6ef.so(+0x3953914)[0x7f8d5898b914]
/checkout/obj/build/x86_64-unknown-linux-gnu/stage2/lib/librustc_driver-f8a3c507cca2e6ef.so(+0x39538de)[0x7f8d5898b8de]
/checkout/obj/build/x86_64-unknown-linux-gnu/stage2/lib/librustc_driver-f8a3c507cca2e6ef.so(+0x3953914)[0x7f8d5898b914]
/checkout/obj/build/x86_64-unknown-linux-gnu/stage2/lib/librustc_driver-f8a3c507cca2e6ef.so(+0x39538de)[0x7f8d5898b8de]
/checkout/obj/build/x86_64-unknown-linux-gnu/stage2/lib/librustc_driver-f8a3c507cca2e6ef.so(+0x3953914)[0x7f8d5898b914]
/checkout/obj/build/x86_64-unknown-linux-gnu/stage2/lib/librustc_driver-f8a3c507cca2e6ef.so(+0x39538de)[0x7f8d5898b8de]
/checkout/obj/build/x86_64-unknown-linux-gnu/stage2/lib/librustc_driver-f8a3c507cca2e6ef.so(+0x3953914)[0x7f8d5898b914]
/checkout/obj/build/x86_64-unknown-linux-gnu/stage2/lib/librustc_driver-f8a3c507cca2e6ef.so(+0x39538de)[0x7f8d5898b8de]
/checkout/obj/build/x86_64-unknown-linux-gnu/stage2/lib/librustc_driver-f8a3c507cca2e6ef.so(+0x3953914)[0x7f8d5898b914]
/checkout/obj/build/x86_64-unknown-linux-gnu/stage2/lib/librustc_driver-f8a3c507cca2e6ef.so(+0x39538de)[0x7f8d5898b8de]
/checkout/obj/build/x86_64-unknown-linux-gnu/stage2/lib/librustc_driver-f8a3c507cca2e6ef.so(+0x3953914)[0x7f8d5898b914]
/checkout/obj/build/x86_64-unknown-linux-gnu/stage2/lib/librustc_driver-f8a3c507cca2e6ef.so(+0x39538de)[0x7f8d5898b8de]
/checkout/obj/build/x86_64-unknown-linux-gnu/stage2/lib/librustc_driver-f8a3c507cca2e6ef.so(+0x3953914)[0x7f8d5898b914]
/checkout/obj/build/x86_64-unknown-linux-gnu/stage2/lib/librustc_driver-f8a3c507cca2e6ef.so(+0x39538de)[0x7f8d5898b8de]
/checkout/obj/build/x86_64-unknown-linux-gnu/stage2/lib/librustc_driver-f8a3c507cca2e6ef.so(+0x3953914)[0x7f8d5898b914]
/checkout/obj/build/x86_64-unknown-linux-gnu/stage2/lib/librustc_driver-f8a3c507cca2e6ef.so(+0x39538de)[0x7f8d5898b8de]
/checkout/obj/build/x86_64-unknown-linux-gnu/stage2/lib/librustc_driver-f8a3c507cca2e6ef.so(+0x3953914)[0x7f8d5898b914]
/checkout/obj/build/x86_64-unknown-linux-gnu/stage2/lib/librustc_driver-f8a3c507cca2e6ef.so(+0x39538de)[0x7f8d5898b8de]
/checkout/obj/build/x86_64-unknown-linux-gnu/stage2/lib/librustc_driver-f8a3c507cca2e6ef.so(+0x3953914)[0x7f8d5898b914]
/checkout/obj/build/x86_64-unknown-linux-gnu/stage2/lib/librustc_driver-f8a3c507cca2e6ef.so(+0x39538de)[0x7f8d5898b8de]
/checkout/obj/build/x86_64-unknown-linux-gnu/stage2/lib/librustc_driver-f8a3c507cca2e6ef.so(+0x3953914)[0x7f8d5898b914]
/checkout/obj/build/x86_64-unknown-linux-gnu/stage2/lib/librustc_driver-f8a3c507cca2e6ef.so(+0x39538de)[0x7f8d5898b8de]
/checkout/obj/build/x86_64-unknown-linux-gnu/stage2/lib/librustc_driver-f8a3c507cca2e6ef.so(+0x3953914)[0x7f8d5898b914]
/checkout/obj/build/x86_64-unknown-linux-gnu/stage2/lib/librustc_driver-f8a3c507cca2e6ef.so(+0x39538de)[0x7f8d5898b8de]
/checkout/obj/build/x86_64-unknown-linux-gnu/stage2/lib/librustc_driver-f8a3c507cca2e6ef.so(+0x3953914)[0x7f8d5898b914]
/checkout/obj/build/x86_64-unknown-linux-gnu/stage2/lib/librustc_driver-f8a3c507cca2e6ef.so(+0x39538de)[0x7f8d5898b8de]
/checkout/obj/build/x86_64-unknown-linux-gnu/stage2/lib/librustc_driver-f8a3c507cca2e6ef.so(+0x3953914)[0x7f8d5898b914]
/checkout/obj/build/x86_64-unknown-linux-gnu/stage2/lib/librustc_driver-f8a3c507cca2e6ef.so(+0x39538de)[0x7f8d5898b8de]
/checkout/obj/build/x86_64-unknown-linux-gnu/stage2/lib/librustc_driver-f8a3c507cca2e6ef.so(+0x3953914)[0x7f8d5898b914]
/checkout/obj/build/x86_64-unknown-linux-gnu/stage2/lib/librustc_driver-f8a3c507cca2e6ef.so(+0x39538de)[0x7f8d5898b8de]
/checkout/obj/build/x86_64-unknown-linux-gnu/stage2/lib/librustc_driver-f8a3c507cca2e6ef.so(+0x3953914)[0x7f8d5898b914]
/checkout/obj/build/x86_64-unknown-linux-gnu/stage2/lib/librustc_driver-f8a3c507cca2e6ef.so(+0x39538de)[0x7f8d5898b8de]
/checkout/obj/build/x86_64-unknown-linux-gnu/stage2/lib/librustc_driver-f8a3c507cca2e6ef.so(+0x3953914)[0x7f8d5898b914]
/checkout/obj/build/x86_64-unknown-linux-gnu/stage2/lib/librustc_driver-f8a3c507cca2e6ef.so(+0x39538de)[0x7f8d5898b8de]
/checkout/obj/build/x86_64-unknown-linux-gnu/stage2/lib/librustc_driver-f8a3c507cca2e6ef.so(+0x3953914)[0x7f8d5898b914]
/checkout/obj/build/x86_64-unknown-linux-gnu/stage2/lib/librustc_driver-f8a3c507cca2e6ef.so(+0x39538de)[0x7f8d5898b8de]
/checkout/obj/build/x86_64-unknown-linux-gnu/stage2/lib/librustc_driver-f8a3c507cca2e6ef.so(+0x3953914)[0x7f8d5898b914]
/checkout/obj/build/x86_64-unknown-linux-gnu/stage2/lib/librustc_driver-f8a3c507cca2e6ef.so(+0x39538de)[0x7f8d5898b8de]
/checkout/obj/build/x86_64-unknown-linux-gnu/stage2/lib/librustc_driver-f8a3c507cca2e6ef.so(+0x3953914)[0x7f8d5898b914]
/checkout/obj/build/x86_64-unknown-linux-gnu/stage2/lib/librustc_driver-f8a3c507cca2e6ef.so(+0x39538de)[0x7f8d5898b8de]
/checkout/obj/build/x86_64-unknown-linux-gnu/stage2/lib/librustc_driver-f8a3c507cca2e6ef.so(+0x3953914)[0x7f8d5898b914]
/checkout/obj/build/x86_64-unknown-linux-gnu/stage2/lib/librustc_driver-f8a3c507cca2e6ef.so(+0x39538de)[0x7f8d5898b8de]
/checkout/obj/build/x86_64-unknown-linux-gnu/stage2/lib/librustc_driver-f8a3c507cca2e6ef.so(+0x3953914)[0x7f8d5898b914]
/checkout/obj/build/x86_64-unknown-linux-gnu/stage2/lib/librustc_driver-f8a3c507cca2e6ef.so(+0x39538de)[0x7f8d5898b8de]
/checkout/obj/build/x86_64-unknown-linux-gnu/stage2/lib/librustc_driver-f8a3c507cca2e6ef.so(+0x3953914)[0x7f8d5898b914]
/checkout/obj/build/x86_64-unknown-linux-gnu/stage2/lib/librustc_driver-f8a3c507cca2e6ef.so(+0x39538de)[0x7f8d5898b8de]
/checkout/obj/build/x86_64-unknown-linux-gnu/stage2/lib/librustc_driver-f8a3c507cca2e6ef.so(+0x3953914)[0x7f8d5898b914]
/checkout/obj/build/x86_64-unknown-linux-gnu/stage2/lib/librustc_driver-f8a3c507cca2e6ef.so(+0x39538de)[0x7f8d5898b8de]
/checkout/obj/build/x86_64-unknown-linux-gnu/stage2/lib/librustc_driver-f8a3c507cca2e6ef.so(+0x3953914)[0x7f8d5898b914]
/checkout/obj/build/x86_64-unknown-linux-gnu/stage2/lib/librustc_driver-f8a3c507cca2e6ef.so(+0x39538de)[0x7f8d5898b8de]
/checkout/obj/build/x86_64-unknown-linux-gnu/stage2/lib/librustc_driver-f8a3c507cca2e6ef.so(+0x3953914)[0x7f8d5898b914]
/checkout/obj/build/x86_64-unknown-linux-gnu/stage2/lib/librustc_driver-f8a3c507cca2e6ef.so(+0x39538de)[0x7f8d5898b8de]
/checkout/obj/build/x86_64-unknown-linux-gnu/stage2/lib/librustc_driver-f8a3c507cca2e6ef.so(+0x3953914)[0x7f8d5898b914]
/checkout/obj/build/x86_64-unknown-linux-gnu/stage2/lib/librustc_driver-f8a3c507cca2e6ef.so(+0x39538de)[0x7f8d5898b8de]
/checkout/obj/build/x86_64-unknown-linux-gnu/stage2/lib/librustc_driver-f8a3c507cca2e6ef.so(+0x3953914)[0x7f8d5898b914]
/checkout/obj/build/x86_64-unknown-linux-gnu/stage2/lib/librustc_driver-f8a3c507cca2e6ef.so(+0x39538de)[0x7f8d5898b8de]
/checkout/obj/build/x86_64-unknown-linux-gnu/stage2/lib/librustc_driver-f8a3c507cca2e6ef.so(+0x3953914)[0x7f8d5898b914]
/checkout/obj/build/x86_64-unknown-linux-gnu/stage2/lib/librustc_driver-f8a3c507cca2e6ef.so(+0x39538de)[0x7f8d5898b8de]
/checkout/obj/build/x86_64-unknown-linux-gnu/stage2/lib/librustc_driver-f8a3c507cca2e6ef.so(+0x3953914)[0x7f8d5898b914]
/checkout/obj/build/x86_64-unknown-linux-gnu/stage2/lib/librustc_driver-f8a3c507cca2e6ef.so(+0x39538de)[0x7f8d5898b8de]
/checkout/obj/build/x86_64-unknown-linux-gnu/stage2/lib/librustc_driver-f8a3c507cca2e6ef.so(+0x3953914)[0x7f8d5898b914]
/checkout/obj/build/x86_64-unknown-linux-gnu/stage2/lib/librustc_driver-f8a3c507cca2e6ef.so(+0x39538de)[0x7f8d5898b8de]
/checkout/obj/build/x86_64-unknown-linux-gnu/stage2/lib/librustc_driver-f8a3c507cca2e6ef.so(+0x3953914)[0x7f8d5898b914]



failures:

@bors
Copy link
Contributor

bors commented Jul 4, 2023

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

@goffrie
Copy link
Contributor

goffrie commented Sep 21, 2023

This PR does not change the behaviour of that code, but introduces a spurious "unreachable pattern" warning on the _.

It looks like even on stable today, there is already an "unreachable pattern" warning in that case, per the playground link?

@nyabinary
Copy link

This PR does not change the behaviour of that code, but introduces a spurious "unreachable pattern" warning on the _.

It looks like even on stable today, there is already an "unreachable pattern" warning in that case, per the playground link?

Wait, what do you mean by that?

@goffrie
Copy link
Contributor

goffrie commented Nov 26, 2023

This playground shows a warning even on stable:

warning: unreachable pattern
  --> src/main.rs:13:13
   |
13 |             _ if {
   |             ^
   |
   = note: `#[warn(unreachable_patterns)]` on by default

@Nadrieril
Copy link
Member

This is indeed a bug, which is tracked in #117119. I am about to submit a PR to fix it

@lcnr
Copy link
Contributor

lcnr commented Aug 14, 2024

Going through all my github assignments rn. Since this PR has been opened feature(min_exhaustive_patterns) has been stabilized in #122792. I would expect that stabilizing the rest of feature(exhaustive_patterns) requires future discussion and a more involved stabilization proposal. Please open a new PR for that in this case, closing.

@lcnr lcnr closed this Aug 14, 2024
@cjgillot cjgillot deleted the exhaustive-patterns branch August 15, 2024 01:58
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
A-exhaustiveness-checking Relating to exhaustiveness / usefulness checking of patterns F-exhaustive_patterns `#![feature(exhaustive_patterns)]` S-waiting-on-author Status: This is awaiting some action (such as code changes or more information) from the author. T-compiler Relevant to the compiler team, which will review and decide on the PR/issue. T-lang Relevant to the language team, which will review and decide on the PR/issue. T-libs Relevant to the library team, which will review and decide on the PR/issue.
Projects
None yet