Skip to content

ICE: expand: unimplemented #140479

Description

@matthiaskrgr

auto-reduced (treereduce-rust):

macro_rules! a {
    ( $( { $( [ $( ( $( $foo:ident )* ) )* ] )* } )* ) => {
        (
            $,
            $(u128::{
        const ${concat(FOO, $foo)}: i32 = 2;

    }, ),
            //~^ ERROR depth parameter of meta-variable expression `count` must be less than 4
        )
    };
}

macro_rules! b {
    ( $( { $( [ $( $foo:ident )* ] )* } )* ) => ;
}

fn main() {
    a!( { [ (a) ] [ (b c) ] } );

    c!({ a });
}
original code

original:

#![feature(macro_metavar_expr)]

macro_rules! a {
    ( $( { $( [ $( ( $( $foo:ident )* ) )* ] )* } )* ) => {
        (
            ${count($foo, 0)},
            $(u128::from_le_bytes{
        const ${concat(FOO, $foo)}: i32 = 2;
        //~^ ERROR variable `foo` is not recognized in meta-variable expression
    }, 0x40029000000000000000000000000000),
            //~^ ERROR depth parameter of meta-variable expression `count` must be less than 4
        )
    };
}

macro_rules! b {
    ( $( { $( [ $( $foo:ident )* ] )* } )* ) => {
        (
            $( $( $(
                ${ignore($foo)}
                ${index($p:path |)},
                ${index(10)},
                //~^ ERROR depth parameter of meta-variable expression `index` must be less than 3
            )* )* )*
        )
    };
}

macro_rules! c {
    ( $( { $( $foo:ident )* } )* ) => {
        (
            $( $(
                ${ignore($foo)}
                ${len(0)}
                ${len(10)}
                //~^ ERROR depth parameter of meta-variable expression `len` must be less than 2
            )* )*
        )
    };
}

fn main() {
    a!( { [ (a) ] [ (b c) ] } );
    b!( { [ a b ] } );
    c!({ a });
}

Version information

rustc 1.88.0-nightly (efcbb94dc 2025-04-29)
binary: rustc
commit-hash: efcbb94dccbe0fcc1076f031f88332db4a6a2a52
commit-date: 2025-04-29
host: x86_64-unknown-linux-gnu
release: 1.88.0-nightly
LLVM version: 20.1.2

Possibly related line of code:

NamedMatch::MatchedSeq(named_matches) => {
let Some((curr_idx, _)) = repeats.last() else {
return Err(dcx.struct_span_err(sp.entire(), "invalid syntax"));
};
match &named_matches[*curr_idx] {
// FIXME(c410-f3r) Nested repetitions are unimplemented
MatchedSeq(_) => unimplemented!(),
MatchedSingle(pnr) => {
extract_symbol_from_pnr(dcx, pnr, ident.span)?
}
}
}
NamedMatch::MatchedSingle(pnr) => {

Command:
/home/matthias/.rustup/toolchains/master/bin/rustc

Program output

error: expected identifier, found `,`
 --> /tmp/icemaker_global_tempdir.3KWQbQU9CIWz/rustc_testrunner_tmpdir_reporting.JmL2GUsKp85j/mvce.rs:4:14
  |
4 |             $,
  |              ^

error[E0658]: the `concat` meta-variable expression is unstable
 --> /tmp/icemaker_global_tempdir.3KWQbQU9CIWz/rustc_testrunner_tmpdir_reporting.JmL2GUsKp85j/mvce.rs:6:16
  |
6 |         const ${concat(FOO, $foo)}: i32 = 2;
  |                ^^^^^^^^^^^^^^^^^^^
  |
  = note: see issue #124225 <https://github.com/rust-lang/rust/issues/124225> for more information
  = help: add `#![feature(macro_metavar_expr_concat)]` to the crate attributes to enable
  = note: this compiler was built on 2025-04-29; consider upgrading it if it is out of date

error: expected one of: `*`, `+`, or `?`
 --> /tmp/icemaker_global_tempdir.3KWQbQU9CIWz/rustc_testrunner_tmpdir_reporting.JmL2GUsKp85j/mvce.rs:8:9
  |
8 |     }, ),
  |         ^

error: macro rhs must be delimited
  --> /tmp/icemaker_global_tempdir.3KWQbQU9CIWz/rustc_testrunner_tmpdir_reporting.JmL2GUsKp85j/mvce.rs:15:49
   |
15 |     ( $( { $( [ $( $foo:ident )* ] )* } )* ) => ;
   |                                                 ^


thread 'rustc' panicked at compiler/rustc_expand/src/mbe/transcribe.rs:795:54:
not implemented
stack backtrace:
   0:     0x7b592550bf73 - <std::sys::backtrace::BacktraceLock::print::DisplayBacktrace as core::fmt::Display>::fmt::h70d0b0bf7dabcc62
   1:     0x7b5925c059c7 - core::fmt::write::h95cfb50f7a1a4aed
   2:     0x7b5927055811 - std::io::Write::write_fmt::he4f9617dc005cd64
   3:     0x7b592550bdd2 - std::sys::backtrace::BacktraceLock::print::h6e0bf7d3d1f1df33
   4:     0x7b592550fc1a - std::panicking::default_hook::{{closure}}::h91ad0c7cab45c956
   5:     0x7b592550f79f - std::panicking::default_hook::h99b2391f3ee22ec6
   6:     0x7b5924589d63 - std[14bf288ed479d8e3]::panicking::update_hook::<alloc[d722d77ad22a6fc8]::boxed::Box<rustc_driver_impl[6cad6eb0dd6473d4]::install_ice_hook::{closure#1}>>::{closure#0}
   7:     0x7b5925510493 - std::panicking::rust_panic_with_hook::h6c88edccaa127d3c
   8:     0x7b5925510156 - std::panicking::begin_panic_handler::{{closure}}::h8818f97a6b4edced
   9:     0x7b592550c439 - std::sys::backtrace::__rust_end_short_backtrace::h029db3b8bf007b60
  10:     0x7b592550fe4d - __rustc[7b288356a4aef171]::rust_begin_unwind
  11:     0x7b5921e8e590 - core::panicking::panic_fmt::hd1ef7fd41505b481
  12:     0x7b5921e931dc - core::panicking::panic::ha19f52c22e6e3c4e
  13:     0x7b5926fc9f66 - <rustc_expand[b527a14089d49d16]::expand::MacroExpander>::fully_expand_fragment
  14:     0x7b5926f8b1b7 - <rustc_expand[b527a14089d49d16]::expand::MacroExpander>::expand_crate
  15:     0x7b592657f87b - rustc_interface[31c3fa0d7a8298a7]::passes::resolver_for_lowering_raw
  16:     0x7b592657ec8d - rustc_query_impl[5763ea9fb1f3b9e6]::plumbing::__rust_begin_short_backtrace::<rustc_query_impl[5763ea9fb1f3b9e6]::query_impl::resolver_for_lowering_raw::dynamic_query::{closure#2}::{closure#0}, rustc_middle[1fd7e3161c5d5d2a]::query::erase::Erased<[u8; 16usize]>>
  17:     0x7b592657ec79 - <rustc_query_impl[5763ea9fb1f3b9e6]::query_impl::resolver_for_lowering_raw::dynamic_query::{closure#2} as core[12175b0b6b0c4721]::ops::function::FnOnce<(rustc_middle[1fd7e3161c5d5d2a]::ty::context::TyCtxt, ())>>::call_once
  18:     0x7b5926ab9051 - rustc_query_system[c3322cd89c137a94]::query::plumbing::try_execute_query::<rustc_query_impl[5763ea9fb1f3b9e6]::DynamicConfig<rustc_query_system[c3322cd89c137a94]::query::caches::SingleCache<rustc_middle[1fd7e3161c5d5d2a]::query::erase::Erased<[u8; 16usize]>>, false, false, false>, rustc_query_impl[5763ea9fb1f3b9e6]::plumbing::QueryCtxt, false>
  19:     0x7b5926ab8bc0 - rustc_query_impl[5763ea9fb1f3b9e6]::query_impl::resolver_for_lowering_raw::get_query_non_incr::__rust_end_short_backtrace
  20:     0x7b5926b2d4f1 - rustc_interface[31c3fa0d7a8298a7]::passes::create_and_enter_global_ctxt::<core[12175b0b6b0c4721]::option::Option<rustc_interface[31c3fa0d7a8298a7]::queries::Linker>, rustc_driver_impl[6cad6eb0dd6473d4]::run_compiler::{closure#0}::{closure#2}>::{closure#2}::{closure#0}
  21:     0x7b5926cc8eb9 - rustc_interface[31c3fa0d7a8298a7]::interface::run_compiler::<(), rustc_driver_impl[6cad6eb0dd6473d4]::run_compiler::{closure#0}>::{closure#1}
  22:     0x7b5926c8b574 - std[14bf288ed479d8e3]::sys::backtrace::__rust_begin_short_backtrace::<rustc_interface[31c3fa0d7a8298a7]::util::run_in_thread_with_globals<rustc_interface[31c3fa0d7a8298a7]::util::run_in_thread_pool_with_globals<rustc_interface[31c3fa0d7a8298a7]::interface::run_compiler<(), rustc_driver_impl[6cad6eb0dd6473d4]::run_compiler::{closure#0}>::{closure#1}, ()>::{closure#0}, ()>::{closure#0}::{closure#0}, ()>
  23:     0x7b5926c8b9b4 - <<std[14bf288ed479d8e3]::thread::Builder>::spawn_unchecked_<rustc_interface[31c3fa0d7a8298a7]::util::run_in_thread_with_globals<rustc_interface[31c3fa0d7a8298a7]::util::run_in_thread_pool_with_globals<rustc_interface[31c3fa0d7a8298a7]::interface::run_compiler<(), rustc_driver_impl[6cad6eb0dd6473d4]::run_compiler::{closure#0}>::{closure#1}, ()>::{closure#0}, ()>::{closure#0}::{closure#0}, ()>::{closure#1} as core[12175b0b6b0c4721]::ops::function::FnOnce<()>>::call_once::{shim:vtable#0}
  24:     0x7b5926c8cdab - std::sys::pal::unix::thread::Thread::new::thread_start::hbfc0b8ce62741752
  25:     0x7b5920aa370a - <unknown>
  26:     0x7b5920b27aac - <unknown>
  27:                0x0 - <unknown>

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

note: we would appreciate a bug report: https://github.com/rust-lang/rust/issues/new?labels=C-bug%2C+I-ICE%2C+T-compiler&template=ice.md

note: please make sure that you have updated to the latest nightly

note: rustc 1.88.0-nightly (efcbb94dc 2025-04-29) running on x86_64-unknown-linux-gnu

query stack during panic:
#0 [resolver_for_lowering_raw] getting the resolver for lowering
end of query stack
error: aborting due to 4 previous errors

For more information about this error, try `rustc --explain E0658`.

@rustbot label +F-macro_metavar_expr

Activity

  1. added
    C-bugCategory: This is a bug.
    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.
    on Apr 29, 2025
  2. added
    needs-triageThis issue may need triage. Remove when done. See docs forge.rust-lang.org/release/issue-triaging
    on Apr 29, 2025
  3. matthiaskrgr commented on Apr 29, 2025

    @matthiaskrgr
    MemberAuthor

    smaller

    macro_rules! a { ( $( { $ [ $b:c ] } )) => ( $(${ concat(d, $b)} ))}
    fn e() {
        a!({})
    }
  4. matthiaskrgr commented on Apr 29, 2025

    @matthiaskrgr
    MemberAuthor

    Regression in nightly-2024-07-22

    get_commits_between returning commits, len: 6
    commit[0] 2024-07-20: Auto merge of #127663 - Oneirical:fuzzy-testure, r=jieyouxu
    commit[1] 2024-07-20: Auto merge of #128007 - Mark-Simulacrum:bump-version, r=Mark-Simulacrum
    commit[2] 2024-07-21: Auto merge of #128011 - matthiaskrgr:rollup-0vmf75y, r=matthiaskrgr
    commit[3] 2024-07-21: Auto merge of #127715 - klensy:tests-w, r=Mark-Simulacrum
    commit[4] 2024-07-21: Auto merge of #127722 - BoxyUwU:new_adt_const_params_limitations, r=compiler-errors
    commit[5] 2024-07-21: Auto merge of #127993 - weihanglo:update-cargo, r=weihanglo

  5. moxian commented on Apr 29, 2025

    @moxian
    Contributor

    @rustbot label: +A-macros +S-has-mcve +S-has-bisection -needs-triage

  6. added
    A-macrosArea: All kinds of macros (custom derive, macro_rules!, proc macros, ..)
    S-has-bisectionStatus: A bisection has been found for this issue
    S-has-mcveStatus: A Minimal Complete and Verifiable Example has been found for this issue
    and removed
    needs-triageThis issue may need triage. Remove when done. See docs forge.rust-lang.org/release/issue-triaging
    on Apr 29, 2025
  7. added
    S-bug-has-testStatus: This bug is tracked inside the repo by a `known-bug` test.
    on May 20, 2025
  8. added a commit that references this issue on Sep 1, 2025
    aa3a657
  9. added a commit that references this issue on Sep 2, 2025
    c9e5f3d
  10. added a commit that references this issue on Sep 2, 2025
    7b2bfa3
  11. added a commit that references this issue on Sep 2, 2025
    3207840
  12. added a commit that references this issue on Oct 12, 2025
    1632c61
  13. added a commit that references this issue on Nov 10, 2025
    3c0983b
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    A-macrosArea: All kinds of macros (custom derive, macro_rules!, proc macros, ..)C-bugCategory: This is a bug.F-macro_metavar_expr`#![feature(macro_metavar_expr)]`F-macro_metavar_expr_concat`#![feature(macro_metavar_expr_concat)]`I-ICEIssue: The compiler panicked, giving an Internal Compilation Error (ICE) ❄️S-bug-has-testStatus: This bug is tracked inside the repo by a `known-bug` test.S-has-bisectionStatus: A bisection has been found for this issueS-has-mcveStatus: A Minimal Complete and Verifiable Example has been found for this issueT-compilerRelevant to the compiler team, which will review and decide on the PR/issue.

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions