Skip to content

Crash with or_patterns in irrefutable match #67514

Closed

Description

Hi,

#![feature(or_patterns)]

fn foo((Some(_) | None): Option<u32>) {
    //
}

(playground)

... crashes on nightly with:

error: internal compiler error: match pairs [MatchPair { place: _1, pattern: Pat { ty: std::option::Option<u32>, span: src/lib.rs:3:9: 3:23, kind: Or { pats: [Pat { ty: std::option::Option<u32>, span: src/lib.rs:3:9: 3:16, kind: Variant { adt_def: std::option::Option, substs: [u32], variant_index: 1, subpatterns: [FieldPat { field: field[0], pattern: Pat { ty: u32, span: src/lib.rs:3:14: 3:15, kind: Wild } }] } }, Pat { ty: std::option::Option<u32>, span: src/lib.rs:3:19: 3:23, kind: Variant { adt_def: std::option::Option, substs: [u32], variant_index: 0, subpatterns: [] } }] } } }] remaining after simplifying irrefutable pattern
Backtrace
warning: the feature `or_patterns` is incomplete and may cause the compiler to crash
 --> src/lib.rs:1:12
  |
1 | #![feature(or_patterns)]
  |            ^^^^^^^^^^^
  |
  = note: `#[warn(incomplete_features)]` on by default

warning: function is never used: `foo`
 --> src/lib.rs:3:4
  |
3 | fn foo((Some(_) | None): Option<u32>) {
  |    ^^^
  |
  = note: `#[warn(dead_code)]` on by default

error: internal compiler error: match pairs [MatchPair { place: _1, pattern: Pat { ty: std::option::Option<u32>, span: src/lib.rs:3:9: 3:23, kind: Or { pats: [Pat { ty: std::option::Option<u32>, span: src/lib.rs:3:9: 3:16, kind: Variant { adt_def: std::option::Option, substs: [u32], variant_index: 1, subpatterns: [FieldPat { field: field[0], pattern: Pat { ty: u32, span: src/lib.rs:3:14: 3:15, kind: Wild } }] } }, Pat { ty: std::option::Option<u32>, span: src/lib.rs:3:19: 3:23, kind: Variant { adt_def: std::option::Option, substs: [u32], variant_index: 0, subpatterns: [] } }] } } }] remaining after simplifying irrefutable pattern
 --> src/lib.rs:3:9
  |
3 | fn foo((Some(_) | None): Option<u32>) {
  |         ^^^^^^^^^^^^^^

thread 'rustc' panicked at 'no errors encountered even though `delay_span_bug` issued', src/librustc_errors/lib.rs:347:17
stack backtrace:
   0: backtrace::backtrace::libunwind::trace
             at /cargo/registry/src/github.com-1ecc6299db9ec823/backtrace-0.3.40/src/backtrace/libunwind.rs:88
   1: backtrace::backtrace::trace_unsynchronized
             at /cargo/registry/src/github.com-1ecc6299db9ec823/backtrace-0.3.40/src/backtrace/mod.rs:66
   2: std::sys_common::backtrace::_print_fmt
             at src/libstd/sys_common/backtrace.rs:84
   3: <std::sys_common::backtrace::_print::DisplayBacktrace as core::fmt::Display>::fmt
             at src/libstd/sys_common/backtrace.rs:61
   4: core::fmt::write
             at src/libcore/fmt/mod.rs:1057
   5: std::io::Write::write_fmt
             at src/libstd/io/mod.rs:1426
   6: std::sys_common::backtrace::_print
             at src/libstd/sys_common/backtrace.rs:65
   7: std::sys_common::backtrace::print
             at src/libstd/sys_common/backtrace.rs:50
   8: std::panicking::default_hook::{{closure}}
             at src/libstd/panicking.rs:193
   9: std::panicking::default_hook
             at src/libstd/panicking.rs:210
  10: rustc_driver::report_ice
  11: std::panicking::rust_panic_with_hook
             at src/libstd/panicking.rs:475
  12: std::panicking::begin_panic
  13: <rustc_errors::HandlerInner as core::ops::drop::Drop>::drop
  14: core::ptr::real_drop_in_place
  15: core::ptr::real_drop_in_place
  16: core::ptr::real_drop_in_place
  17: rustc_interface::interface::run_compiler_in_existing_thread_pool
  18: std::thread::local::LocalKey<T>::with
  19: scoped_tls::ScopedKey<T>::set
  20: syntax::with_globals
note: Some details are omitted, run with `RUST_BACKTRACE=full` for a verbose backtrace.

error: internal compiler error: unexpected panic

note: the compiler unexpectedly panicked. this is a bug.

note: we would appreciate a bug report: https://github.com/rust-lang/rust/blob/master/CONTRIBUTING.md#bug-reports

note: rustc 1.42.0-nightly (fc5deca21 2019-12-21) running on x86_64-unknown-linux-gnu

note: compiler flags: -C codegen-units=1 -C debuginfo=2 --crate-type lib

note: some of the compiler flags provided by cargo are hidden

query stack during panic:
end of query stack
error: could not compile `playground`.

To learn more, run the command again with --verbose.

It doesn't crash on current stable and beta, but it may be because they ignore the feature flag.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Assignees

No one assigned

    Labels

    C-bugCategory: This is a bug.F-or_patterns`#![feature(or_patterns)]`I-ICEIssue: The compiler panicked, giving an Internal Compilation Error (ICE) ❄️T-compilerRelevant to the compiler team, which will review and decide on the PR/issue.glacierICE tracked in rust-lang/glacier.requires-nightlyThis issue requires a nightly compiler in some way.

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions