ICE: `in operator(), at rust/typecheck/rust-hir-dot-operator.cc:267`
Open
@philberty is already working on this.
Since Sep 15, 2026.
bug
- Dominant language
- C++
- Stars
- 2.9k
- Forks
- 231
- Avg merge
- 19h 55m
- Merged PRs (30d)
- 67
Description
auto-reduced (treereduce-rust):
//@compile-flags: -frust-incomplete-and-experimental-compiler-do-not-use
enum Foo {
Bar,
}
fn main() {
let p = [0; 0];
p.bar();
}
impl Foo for [u32; Foo::Bar as usize] {}
original:
// check-pass
#![deny(dead_code)]
enum Foo {
Bar,
}
fn main() {
let p = [0; 0];
p.bar();
}
trait Bar {}
impl Foo for [u32; Foo::Bar as usize] {}
Version information:
5c3e2adc695b04a199d37cacd8c23b14fdab914f
Possibly related line of code:
https://github.com/Rust-GCC/gccrs/blob/5c3e2adc695b04a199d37cacd8c23b14fdab914f/gcc/rust/typecheck/rust-hir-dot-operator.cc#L261-L273
Command:
/home/matthias/vcs/github/gccrs/gccrs-build/gcc/crab1 -frust-incomplete-and-experimental-compiler-do-not-use
Program output
/tmp/icemaker_global_tempdir.MwJGF7IKFRKJ/rustc_testrunner_tmpdir_reporting.broV4hRkHwae/mvce.rs:10:6: error: Expected a trait found ‘Foo’ [E0404]
10 | impl Foo for [u32; Foo::Bar as usize] {}
| ^~~
| not a trait
crab1: internal compiler error: in operator(), at rust/typecheck/rust-hir-dot-operator.cc:267
0x2fec938 internal_error(char const*, ...)
../../gcc/diagnostic-global-context.cc:517
0xc0dfbb fancy_abort(char const*, int, char const*)
../../gcc/diagnostic.cc:1803
0x906cca operator()
../../gcc/rust/typecheck/rust-hir-dot-operator.cc:267
0x906cca __invoke_impl<bool, Rust::Resolver::MethodResolver::assemble_trait_impl_candidates(const Rust::TyTy::BaseType&, std::vector<impl_item_candidate>&, std::vector<trait_item_candidate>&)::<lambda(Rust::HirId, Rust::HIR::ImplBlock*)>&, unsigned int, Rust::HIR::ImplBlock*>
/usr/include/c++/15.1.1/bits/invoke.h:63
0x906cca __invoke_r<bool, Rust::Resolver::MethodResolver::assemble_trait_impl_candidates(const Rust::TyTy::BaseType&, std::vector<impl_item_candidate>&, std::vector<trait_item_candidate>&)::<lambda(Rust::HirId, Rust::HIR::ImplBlock*)>&, unsigned int, Rust::HIR::ImplBlock*>
/usr/include/c++/15.1.1/bits/invoke.h:116
0x906cca _M_invoke
/usr/include/c++/15.1.1/bits/std_function.h:292
0xf3164a std::function<bool (unsigned int, Rust::HIR::ImplBlock*)>::operator()(unsigned int, Rust::HIR::ImplBlock*) const
/usr/include/c++/15.1.1/bits/std_function.h:593
0xf3164a Rust::Analysis::Mappings::iterate_impl_blocks(std::function<bool (unsigned int, Rust::HIR::ImplBlock*)>)
../../gcc/rust/util/rust-hir-map.cc:831
0x10e87bb Rust::Resolver::MethodResolver::assemble_trait_impl_candidates(Rust::TyTy::BaseType const&, std::vector<Rust::Resolver::MethodResolver::impl_item_candidate, std::allocator<Rust::Resolver::MethodResolver::impl_item_candidate> >&, std::vector<Rust::Resolver::MethodResolver::trait_item_candidate, std::allocator<Rust::Resolver::MethodResolver::trait_item_candidate> >&)
../../gcc/rust/typecheck/rust-hir-dot-operator.cc:196
0x10eb658 Rust::Resolver::MethodResolver::select(Rust::TyTy::BaseType&)
../../gcc/rust/typecheck/rust-hir-dot-operator.cc:427
0x1127051 Rust::Resolver::AutoderefCycle::try_autoderefed(Rust::TyTy::BaseType*)
../../gcc/rust/typecheck/rust-autoderef.cc:422
0x112832e Rust::Resolver::AutoderefCycle::cycle(Rust::TyTy::BaseType*)
../../gcc/rust/typecheck/rust-autoderef.cc:328
0x10e88a8 Rust::Resolver::MethodResolver::Probe(Rust::TyTy::BaseType*, Rust::HIR::PathIdentSegment const&, bool)
../../gcc/rust/typecheck/rust-hir-dot-operator.cc:40
0x10a1472 Rust::Resolver::TypeCheckExpr::visit(Rust::HIR::MethodCallExpr&)
../../gcc/rust/typecheck/rust-hir-type-check-expr.cc:1307
0x109a314 Rust::Resolver::TypeCheckExpr::Resolve(Rust::HIR::Expr&)
../../gcc/rust/typecheck/rust-hir-type-check-expr.cc:50
0x10a990c ???
../../gcc/rust/typecheck/rust-hir-type-check-stmt.h:33
0x10a9fa3 Rust::Resolver::TypeCheckStmt::Resolve(Rust::HIR::Stmt&)
../../gcc/rust/typecheck/rust-hir-type-check-stmt.cc:34
0x109bd31 Rust::Resolver::TypeCheckExpr::visit(Rust::HIR::BlockExpr&)
../../gcc/rust/typecheck/rust-hir-type-check-expr.cc:609
0x109a314 Rust::Resolver::TypeCheckExpr::Resolve(Rust::HIR::Expr&)
../../gcc/rust/typecheck/rust-hir-type-check-expr.cc:50
0x1077370 Rust::Resolver::TypeCheckItem::visit(Rust::HIR::Function&)
../../gcc/rust/typecheck/rust-hir-type-check-item.cc:642
Please submit a full bug report, with preprocessed source (by using -freport-bug).
Please include the complete backtrace with any bug report.
See <https://gcc.gnu.org/bugs/> for instructions.
Contributor guide
First steps
- Read the whole issue, then the project's contributing guide.
- Comment on the issue to say you are picking it up — it saves two people doing the same work.
- Fork the repository and make your change on a branch.
- Open a pull request that references the issue number.
Assessment
This issue has not been assessed yet.