Skip to content

ICE on edition 2018 with anonymous impl lifetime in the wrong place #52098

Closed
@zackmdavis

Description

@zackmdavis

Reduced:

struct IceCube<'a> {
    v: Vec<&'a char>
}

impl<'_> IceCube {}

fn main() {}

(Correct) errors on edition 2015:

zmd@ReflectiveCoherence:~/Code/Misc$ rustc +nightly icy.rs 
error[E0262]: invalid lifetime parameter name: `'_`
 --> icy.rs:5:6
  |
5 | impl<'_> IceCube {}
  |      ^^ '_ is a reserved lifetime name

error[E0106]: missing lifetime specifier
 --> icy.rs:5:10
  |
5 | impl<'_> IceCube {}
  |          ^^^^^^^ expected lifetime parameter

error: aborting due to 2 previous errors

Some errors occurred: E0106, E0262.
For more information about an error, try `rustc --explain E0106`.

Stacktrace on edition 2018:

zmd@ReflectiveCoherence:~/Code/Misc$ RUST_BACKTRACE=full rustc +nightly icy.rs --edition 2018
thread 'main' panicked at 'assertion failed: self.is_collecting_in_band_lifetimes', librustc/hir/lowering.rs:735:9
stack backtrace:
   0:     0x7f7b651c10fe - std::sys::unix::backtrace::tracing::imp::unwind_backtrace::h50a634a60cb4e5f7
                               at libstd/sys/unix/backtrace/tracing/gcc_s.rs:49
   1:     0x7f7b651984b6 - std::sys_common::backtrace::print::hfdd27bb0425df770
                               at libstd/sys_common/backtrace.rs:71
                               at libstd/sys_common/backtrace.rs:59
   2:     0x7f7b651c834d - std::panicking::default_hook::{{closure}}::h027136eae47935d0
                               at libstd/panicking.rs:211
   3:     0x7f7b651c80c0 - std::panicking::default_hook::hed5917d304f00a1b
                               at libstd/panicking.rs:227
   4:     0x7f7b6185a3e5 - rustc::util::common::panic_hook::h9e9cb098ca9688d6
   5:     0x7f7b651c8ad3 - std::panicking::rust_panic_with_hook::hc482345e1eead25b
                               at libstd/panicking.rs:515
   6:     0x7f7b612a4336 - std::panicking::begin_panic::hc99c40d451548ee4
   7:     0x7f7b6180c531 - rustc::hir::lowering::LoweringContext::lower_lifetime::hde6e623ecce2735f
   8:     0x7f7b617a4e2b - core::ops::function::impls::<impl core::ops::function::FnOnce<A> for &'a mut F>::call_once::h7b1ed582bf44fa1a
   9:     0x7f7b613ac666 - <alloc::vec::Vec<T> as alloc::vec::SpecExtend<T, I>>::from_iter::h942b3350b2cd31a5
  10:     0x7f7b6180c96f - rustc::hir::lowering::LoweringContext::lower_generics::hcf6e7430f81e15a4
  11:     0x7f7b61810dff - rustc::hir::lowering::LoweringContext::lower_item::hf3bbbc3afed70764
  12:     0x7f7b617fe81b - <rustc::hir::lowering::LoweringContext::lower_crate::ItemLowerer<'lcx, 'interner> as syntax::visit::Visitor<'lcx>>::visit_item::h8578ba219875c385
  13:     0x7f7b617fd84a - rustc::hir::lowering::lower_crate::hba78ac42c9a968fe
  14:     0x7f7b6556f1e6 - rustc::util::common::time::h116d0a6c5fad3bc0
  15:     0x7f7b65563e50 - rustc_driver::driver::phase_2_configure_and_expand::h805364562785bbc9
  16:     0x7f7b6555e81b - rustc_driver::driver::compile_input::h95eb8b7dd032d269
  17:     0x7f7b655eb295 - rustc_driver::run_compiler_with_pool::h94fbd18de41dc2e2
  18:     0x7f7b6554f97b - <scoped_tls::ScopedKey<T>>::set::h4c03440eebe30a1f
  19:     0x7f7b65524f2a - syntax::with_globals::h57af6031309babcc
  20:     0x7f7b65505722 - <std::panic::AssertUnwindSafe<F> as core::ops::function::FnOnce<()>>::call_once::hb1f190602052e50b
  21:     0x7f7b651d6c59 - __rust_maybe_catch_panic
                               at libpanic_unwind/lib.rs:105
  22:     0x7f7b655e8423 - rustc_driver::run::h7fa1696458a8f761
  23:     0x7f7b655f826a - rustc_driver::main::he4d005c782d5073a
  24:     0x55c2d9ebbb52 - std::rt::lang_start::{{closure}}::h99d53d66d7fac3dd
  25:     0x7f7b651c8512 - std::panicking::try::do_call::h7e0ed4dd1b773c21
                               at libstd/rt.rs:59
                               at libstd/panicking.rs:310
  26:     0x7f7b651d6c59 - __rust_maybe_catch_panic
                               at libpanic_unwind/lib.rs:105
  27:     0x7f7b6518cd55 - std::rt::lang_start_internal::h7c38f1310577c409
                               at libstd/panicking.rs:289
                               at libstd/panic.rs:392
                               at libstd/rt.rs:58
  28:     0x55c2d9ebbbb3 - main
  29:     0x7f7b64d9082f - __libc_start_main
  30:     0x55c2d9ebba38 - <unknown>
query stack during panic:
end of query stack

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.28.0-nightly (e3bf634e0 2018-06-28) running on x86_64-unknown-linux-gnu

The failing assertion is during HIR lowering.

zmd@ReflectiveCoherence:~/Code/Misc$ rustc +nightly --version --verbose
rustc 1.28.0-nightly (e3bf634e0 2018-06-28)
binary: rustc
commit-hash: e3bf634e060bc2f8665878288bcea02008ca346e
commit-date: 2018-06-28
host: x86_64-unknown-linux-gnu
release: 1.28.0-nightly
LLVM version: 6.0

Metadata

Metadata

Assignees

Labels

A-edition-2018Area: The 2018 editionA-lifetimesArea: Lifetimes / regionsF-rust_2018_preview`#![feature(rust_2018_preview)]`I-ICEIssue: The compiler panicked, giving an Internal Compilation Error (ICE) ❄️P-highHigh priorityT-compilerRelevant to the compiler team, which will review and decide on the PR/issue.

Type

No type

Projects

No projects

Relationships

None yet

Development

No branches or pull requests

Issue actions