Skip to content

ICE: Macro parser: Error message, then compiler panic. #33569

Closed
@matthewhammer

Description

@matthewhammer

Nightly compiler panics on a silly macro pattern that uses a double dollar sign ($$).

I tried this code:
https://play.rust-lang.org/?gist=0aafe97edc13def2e090e3a09527dcc6&version=nightly&backtrace=0

macro_rules! foo {
  { $a:expr $$ $b:expr } => {{ 0 }};
}

fn main() {
    println!("Hello, world!");
}

I expected either a compiler error, or for the macro to be legally definable, and for the compiler to accept this silly definition. Instead, the compiler complains and then panics.

Here's the output, which seems reasonable, up until the panic:

error: expected identifier, found `$`
 --> <anon>:2:14
2 |>   { $a:expr $$ $b:expr } => {{ 0 }};
  |>              ^
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
thread 'rustc' panicked at 'internal error: entered unreachable code', ../src/libsyntax/parse/parser.rs:2848
note: Run with `RUST_BACKTRACE=1` for a backtrace.

Backtrace

thread 'rustc' panicked at 'internal error: entered unreachable code', ../src/libsyntax/parse/parser.rs:2848
stack backtrace:
   1:        0x10fb10f38 - std::sys::backtrace::tracing::imp::write::h9fb600083204ae7f
   2:        0x10fb1d475 - std::panicking::default_hook::_$u7b$$u7b$closure$u7d$$u7d$::hca543c34f11229ac
   3:        0x10fb1cfaf - std::panicking::default_hook::hc2c969e7453d080c
   4:        0x10fae23d6 - std::sys_common::unwind::begin_unwind_inner::h30e12d15ce2b2e25
   5:        0x10cc95ef4 - std::sys_common::unwind::begin_unwind::h65390c63b501d6ed
   6:        0x10cd94009 - syntax::parse::parser::Parser::parse_token_tree::hd7887691a0224788
   7:        0x10cfa95b1 - syntax::ext::tt::macro_parser::parse_nt::h9776ef73ddf4d14c
   8:        0x10ccfd1c4 - syntax::ext::tt::macro_parser::parse::hf8420386b1b7feca
   9:        0x10ced4280 - syntax::ext::tt::macro_rules::compile::h21c8262e7bf89324
  10:        0x10ced3850 - syntax::ext::base::ExtCtxt::insert_macro::h393439bf035c459e
  11:        0x10cf2b567 - syntax::ext::expand::expand_item_mac::hb51c73877df56a79
  12:        0x10cf18797 - syntax::ext::expand::expand_annotatable::hc0f78f406615b5e1
  13:        0x10cf15e8c - syntax::ext::expand::expand_item::hb99af7e0c910686e
  14:        0x10cf23af1 - _<ext..expand..MacroExpander<'a, 'b> as fold..Folder>::fold_item::h8c27a95378ad2c28
  15:        0x10cf237a0 - syntax::fold::noop_fold_mod::hc2718611fc479597
  16:        0x10cf1d343 - syntax::ext::expand::expand_item_kind::h0b21c6d930b6a1e4
  17:        0x10cf5c7ad - syntax::fold::Folder::fold_item_simple::ha749d2ae63b235ad
  18:        0x10cf5c396 - _<ptr..P<T>>::map::he640c72a9f20f0a4
  19:        0x10cf19f23 - syntax::ext::expand::expand_annotatable::hc0f78f406615b5e1
  20:        0x10cf15e8c - syntax::ext::expand::expand_item::hb99af7e0c910686e
  21:        0x10cf23d37 - _<ext..expand..MacroExpander<'a, 'b> as fold..Folder>::fold_item::h8c27a95378ad2c28
  22:        0x10cf699b1 - _<ext..expand..MacroExpander<'a, 'b> as fold..Folder>::fold_crate::h072fa0f078d6fae0
  23:        0x10cf6adf6 - syntax::ext::expand::expand_crate::h7e9f12d49472476d
  24:        0x10b05b6c4 - rustc_driver::driver::phase_2_configure_and_expand::_$u7b$$u7b$closure$u7d$$u7d$::hcc02923f666dd3df
  25:        0x10b00b393 - rustc_driver::driver::phase_2_configure_and_expand::h70a47be7bf475f39
  26:        0x10afe6e40 - rustc_driver::driver::compile_input::h0629572e6f316b31
  27:        0x10afdca91 - rustc_driver::run_compiler::h8902aebf8b1849a8
  28:        0x10afd9c65 - std::sys_common::unwind::try::try_fn::h4c74456035d0fcc7
  29:        0x10fb0e75b - __rust_try
  30:        0x10fb0e6e3 - std::sys_common::unwind::inner_try::h47a4d9cd4a369dcd
  31:        0x10afda6f9 - _<F as std..boxed..FnBox<A>>::call_box::h27f542a39f1d61ef
  32:        0x10fb1c348 - std::sys::thread::Thread::new::thread_start::h6f266e069bf4ec2b
  33:     0x7fff932e9059 - _pthread_body
  34:     0x7fff932e8fd6 - _pthread_start

Metadata

Metadata

Assignees

No one assigned

    Labels

    A-macrosArea: All kinds of macros (custom derive, macro_rules!, proc macros, ..)I-ICEIssue: The compiler panicked, giving an Internal Compilation Error (ICE) ❄️

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions