Rust-GCC / Rust-GCC/gccrs

ICE: `in operator(), at rust/typecheck/rust-hir-dot-operator.cc:267`

Open
#3,937 0 comments 0 reactions 1 assignee View on GitHub

@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

Open the contributing guide

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. Open a pull request that references the issue number.

Assessment

This issue has not been assessed yet.

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.