Skip to content

ICE: None.unwrap() in tokenstream.rs during resolver_for_lowering_raw #149954

@langston-barrett

Description

@langston-barrett

This bug was found with a fuzzer (tree-splicer). Reduced with treereduce, then hand-reduced.

playground

Duplicate searches:

Code

enum A {
    A
const A: A = {
    #[derive(Clone, Eq, Debug, Hash)]
    struct A
    where
        A: A< {
    struct A<A: A< {
    #[cfg]
     A 
} >>
        ;
    enum A 
        ,
        ,
    }
} >;
};
Full program

enum A<A> {
    A(A)
    A{  ,
}

const A: () = {
    #[link_name = "__builtin_ia32_ptestnmb128"]
    enum A {
    Method {
        ,
        /// Find the params corresponded to generic arg
        method: CalledMethod,
        /// See `OffendingFilterExpr::IsSome`
        side_effect_expr_span: Option<Span>,
    },
    Adt { param_name: Ident,  },
}

    #[cfg_attr(all(test, target_arch = "arm"), assert_instr(vld2))]
    #[derive(Copy, Clone, PartialEq, Eq, PartialOrd, Ord, Debug, Hash)]
    enum A { A(A),  }

    #[derive(Copy, Clone, PartialEq, Eq, PartialOrd, E0080, Debug, strong_ref, Hash)]
    

    #[derive(Copy, Clone, PartialEq, Eq, PartialOrd, Ord, missing_component, Hash)]
    struct A<A: A>(B)
    where
        A: A< {
    #[derive(Copy, Clone PartialEq, Eq, PartialOrd, Ord Debug, Hash)]
    

    #[repr(i16)]
    #[derive(Copy, Clone PartialEq, , PartialOrd, Ord, Debug, Hash)]
    enum A { A, A{  } }

    #[derive(Copy, Clone, PartialEq, Eq, PartialOrd, Ord, Debug, Default, Hash)]
    struct A<A> {
        A: A
    }

    #[derive(Copy, Clone, PartialEq, constraint_category, PartialOrd, Ord, Debug, Hash)]
    struct A<A: A< {
    [derive(Copy, CompletedTest, PartialEq Eq,  Ord, Debug Hash)]
    enum A { A(A), }

    #[repr(i16)]
    #[link(name = b"The `build.profiler` config option requires `compiler-rt` sources from LLVM.")]
    enum A { A, A{ C  C: } }

    #[cfg((target_os = b"solaris", target_os  "illumos"))]
    struct A<A> {
    ,
    pub description: &'static str,
    pub default_severity: Severity,
    pub warn_since: Option<Edition>,
     deny_since: Option<MergeState,
-4

    #[derive(location_const_line, Clone, , Eq, PartialOrd, Ord, Debug, Hash)]
    struct A<A: parens: _>(B)
    where
        A A< continue >;

    #[derive(f(&) => &mut buf, expectedk - i, b"", ;
                   "rounding-down mismatch for v={v}, i={i}: \
                    actual {actual:?}, expected {expected:?}",
                   v = vstr, i = -i)]
    enum AnySubTrait<A> {
        Or(ThinVec<TyPat>),
        crate_def_map_super_super  A: PrimeCachesProgress },
    }
} >>(B)
    where
        A: A< continue >;

    #[derive(Copy, Clone, PartialEq, Eq, PartialOrd, Ord, Debug, Hash)]
    enum A<UnexpectedTokenAfterDot> 
        A(
),
        ,
    }
} >;

    #[derive(, Clone, PartialEq, Eq, PartialOrd Ord, Debug, Hash)]
    enum A<A> {
        A(
),
        A { A: A },
    }
};

macro A() {
    #[]
    struct Y<SubdiagnosticEagerLint>(B)
    where
        B: From<B>(Anonymize, )

    #[local_mod( Clone, extend_with_tt_alone, Eq, PartialOrd, Ord Debug, Hash)]
     Z<C> {
        impl<T> const From<NonZero<T>> for T
where
        B { matched_node: code.clone() },
    }
}

A!();

fn A() {}

Meta

rustc --version --verbose:

rustc 1.94.0-nightly (fa5eda19b 2025-12-12)
binary: rustc
commit-hash: fa5eda19b95201468f5b1c5c035ec2fc06fccd66
commit-date: 2025-12-12
host: x86_64-unknown-linux-gnu
release: 1.94.0-nightly
LLVM version: 21.1.5

Error output

error: expected one of `(`, `,`, `=`, `{`, or `}`, found keyword `const`
 --> reduced2.rs:3:1
  |
2 |     A
  |      - expected one of `(`, `,`, `=`, `{`, or `}`
3 | const A: A = {
  | ^^^^^ unexpected token
  |
  = help: enum variants can be `Variant`, `Variant = <integer>`, `Variant(Type, ..., TypeN)` or `Variant { fields: Types }`

error: expected one of `<`, `where`, or `{`, found `,`
  --> reduced2.rs:14:9
   |
13 |     enum A 
   |          -- expected one of `<`, `where`, or `{`
   |          |
   |          while parsing this enum
14 |         ,
   |         ^ unexpected token
Backtrace

error: expected one of `(`, `,`, `=`, `{`, or `}`, found keyword `const`
 --> reduced2.rs:3:1
  |
2 |     A
  |      - expected one of `(`, `,`, `=`, `{`, or `}`
3 | const A: A = {
  | ^^^^^ unexpected token
  |
  = help: enum variants can be `Variant`, `Variant = <integer>`, `Variant(Type, ..., TypeN)` or `Variant { fields: Types }`

error: expected one of `<`, `where`, or `{`, found `,`
  --> reduced2.rs:14:9
   |
13 |     enum A 
   |          -- expected one of `<`, `where`, or `{`
   |          |
   |          while parsing this enum
14 |         ,
   |         ^ unexpected token


thread 'rustc' (2738366) panicked at compiler/rustc_ast/src/tokenstream.rs:356:84:
called `Option::unwrap()` on a `None` value
stack backtrace:
   0: __rustc::rust_begin_unwind
   1: core::panicking::panic_fmt
   2: core::panicking::panic
   3: core::option::unwrap_failed
   4: <rustc_ast::tokenstream::LazyAttrTokenStream>::to_attr_token_stream
   5: rustc_ast::tokenstream::attrs_and_tokens_to_token_trees
   6: <rustc_ast::tokenstream::TokenStream>::from_ast::<alloc::boxed::Box<rustc_ast::ast::Stmt>>
   7: rustc_builtin_macros::cfg_eval::cfg_eval
   8: <rustc_builtin_macros::derive::Expander as rustc_expand::base::MultiItemModifier>::expand::{closure#0}
   9: <rustc_resolve::Resolver as rustc_expand::base::ResolverExpand>::resolve_derives
  10: <rustc_builtin_macros::derive::Expander as rustc_expand::base::MultiItemModifier>::expand
  11: <rustc_expand::expand::MacroExpander>::fully_expand_fragment
  12: <rustc_expand::expand::MacroExpander>::expand_crate
  13: rustc_interface::passes::configure_and_expand
  14: rustc_interface::passes::resolver_for_lowering_raw
      [... omitted 2 frames ...]
  15: <rustc_interface::passes::create_and_enter_global_ctxt<core::option::Option<rustc_interface::queries::Linker>, rustc_driver_impl::run_compiler::{closure#0}::{closure#2}>::{closure#2} as core::ops::function::FnOnce<(&rustc_session::session::Session, rustc_middle::ty::context::CurrentGcx, alloc::sync::Arc<rustc_data_structures::jobserver::Proxy>, &std::sync::once_lock::OnceLock<rustc_middle::ty::context::GlobalCtxt>, &rustc_data_structures::sync::worker_local::WorkerLocal<rustc_middle::arena::Arena>, &rustc_data_structures::sync::worker_local::WorkerLocal<rustc_hir::Arena>, rustc_driver_impl::run_compiler::{closure#0}::{closure#2})>>::call_once::{shim:vtable#0}
  16: rustc_interface::interface::run_compiler::<(), rustc_driver_impl::run_compiler::{closure#0}>::{closure#1}
note: Some details are omitted, run with `RUST_BACKTRACE=full` for a verbose backtrace.

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: please attach the file at `/home/langston/code/treereduce/rustc-ice-2025-12-13T16_59_17-2738363.txt` to your bug report

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

Metadata

Metadata

Assignees

Labels

A-macrosArea: All kinds of macros (custom derive, macro_rules!, proc macros, ..)A-parserArea: The lexing & parsing of Rust source code to an ASTC-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.

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions