Rust-GCC / Rust-GCC/gccrs

ICE: `in insert_function_decl, at rust/backend/rust-compile-context.h` recursive method

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

@philberty is already working on this.

Since Sep 17, 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
trait Trait {
    fn method(&self) {
        struct S;
        impl Trait for S {}

        S.method();
    }
}

fn main() {
    struct S;

    S.method();
}

original:

// check-pass

trait Trait {
    fn method(&self) {
        // Items inside a block turn it into a module internally.
        struct S;
        impl Trait for S {}

        // OK, `Trait` is in scope here from method resolution point of view.
        S.method();
    }
}

fn main() {
        // Items inside a block turn it into a module internally.
        struct S;
        impl Trait for S {}

        // OK, `Trait` is in scope here from method resolution point of view.
        S.method();
    }

Version information:

5c3e2adc695b04a199d37cacd8c23b14fdab914f

Possibly related line of code:
https://github.com/Rust-GCC/gccrs/blob/5c3e2adc695b04a199d37cacd8c23b14fdab914f/gcc/rust/backend/rust-compile-context.h#L144-L156

Command:
/home/matthias/vcs/github/gccrs/gccrs-build/gcc/crab1 -frust-incomplete-and-experimental-compiler-do-not-use

Program output

crab1: internal compiler error: in insert_function_decl, at rust/backend/rust-compile-context.h:150
0x2fec938 internal_error(char const*, ...)
	../../gcc/diagnostic-global-context.cc:517
0xc0dfbb fancy_abort(char const*, int, char const*)
	../../gcc/diagnostic.cc:1803
0xdd095e Rust::Compile::Context::insert_function_decl(Rust::TyTy::FnType const*, tree_node*)
	../../gcc/rust/backend/rust-compile-context.h:150
0x118d1a8 Rust::Compile::HIRCompileBase::compile_function(bool, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, tl::optional<Rust::HIR::SelfParam>&, std::vector<Rust::HIR::FunctionParam, std::allocator<Rust::HIR::FunctionParam> >&, Rust::HIR::FunctionQualifiers const&, Rust::HIR::Visibility&, std::vector<Rust::AST::Attribute, std::allocator<Rust::AST::Attribute> >&, unsigned long, Rust::HIR::BlockExpr*, Rust::Resolver::CanonicalPath const&, Rust::TyTy::FnType*)
	../../gcc/rust/backend/rust-compile-base.cc:726
0x115934c Rust::Compile::CompileTraitItem::visit(Rust::HIR::TraitItemFunc&)
	../../gcc/rust/backend/rust-compile-implitem.cc:98
0x118afed Rust::Compile::CompileTraitItem::Compile(Rust::HIR::TraitItem*, Rust::Compile::Context*, Rust::TyTy::BaseType*, bool, unsigned long)
	../../gcc/rust/backend/rust-compile-implitem.h:55
0x118afed Rust::Compile::HIRCompileBase::resolve_method_address(Rust::TyTy::FnType*, Rust::TyTy::BaseType*, unsigned long)
	../../gcc/rust/backend/rust-compile-base.cc:972
0x1167563 Rust::Compile::CompileExpr::visit(Rust::HIR::MethodCallExpr&)
	../../gcc/rust/backend/rust-compile-expr.cc:1447
0x1162ab6 Rust::Compile::CompileExpr::Compile(Rust::HIR::Expr&, Rust::Compile::Context*)
	../../gcc/rust/backend/rust-compile-expr.cc:48
0x11596d0 ???
	../../gcc/rust/backend/rust-compile-stmt.h:33
0x11599bc Rust::Compile::CompileStmt::Compile(Rust::HIR::Stmt*, Rust::Compile::Context*)
	../../gcc/rust/backend/rust-compile-stmt.cc:36
0x118a83c Rust::Compile::HIRCompileBase::compile_function_body(tree_node*, Rust::HIR::BlockExpr&, Rust::TyTy::BaseType*)
	../../gcc/rust/backend/rust-compile-base.cc:613
0x118d7c0 Rust::Compile::HIRCompileBase::compile_function(bool, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, tl::optional<Rust::HIR::SelfParam>&, std::vector<Rust::HIR::FunctionParam, std::allocator<Rust::HIR::FunctionParam> >&, Rust::HIR::FunctionQualifiers const&, Rust::HIR::Visibility&, std::vector<Rust::AST::Attribute, std::allocator<Rust::AST::Attribute> >&, unsigned long, Rust::HIR::BlockExpr*, Rust::Resolver::CanonicalPath const&, Rust::TyTy::FnType*)
	../../gcc/rust/backend/rust-compile-base.cc:791
0x115934c Rust::Compile::CompileTraitItem::visit(Rust::HIR::TraitItemFunc&)
	../../gcc/rust/backend/rust-compile-implitem.cc:98
0x118afed Rust::Compile::CompileTraitItem::Compile(Rust::HIR::TraitItem*, Rust::Compile::Context*, Rust::TyTy::BaseType*, bool, unsigned long)
	../../gcc/rust/backend/rust-compile-implitem.h:55
0x118afed Rust::Compile::HIRCompileBase::resolve_method_address(Rust::TyTy::FnType*, Rust::TyTy::BaseType*, unsigned long)
	../../gcc/rust/backend/rust-compile-base.cc:972
0x1167563 Rust::Compile::CompileExpr::visit(Rust::HIR::MethodCallExpr&)
	../../gcc/rust/backend/rust-compile-expr.cc:1447
0x1162ab6 Rust::Compile::CompileExpr::Compile(Rust::HIR::Expr&, Rust::Compile::Context*)
	../../gcc/rust/backend/rust-compile-expr.cc:48
0x11596d0 ???
	../../gcc/rust/backend/rust-compile-stmt.h:33
0x11599bc Rust::Compile::CompileStmt::Compile(Rust::HIR::Stmt*, Rust::Compile::Context*)
	../../gcc/rust/backend/rust-compile-stmt.cc:36
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.