ICE: `in add_constrints_from_param, at rust/typecheck/rust-tyty-variance-analysis.cc:472`
Open
Nobody has claimed this yet.
bug
- Dominant language
- C++
- Stars
- 2.9k
- Forks
- 231
- Avg merge
- 19h 55m
- Merged PRs (30d)
- 67
Description
Code
Reduced
trait TraitB<A> {
fn outer() {
struct Foo<B>(A);
}
}
Original
trait TraitA<A: TraitA> {
fn outer(&self) {
enum Foo<B> {
Variance(A),
}
}
}
trait TraitB<A> {
fn outer(&self) {
struct Foo<B>(A);
}
}
trait TraitC<A> {
fn outer(&self) {
struct Foo<B> {
a: A,
}
}
}
trait TraitD<A> {
fn outer(&self) {
fn foo<B>(a: A) {}
}
}
fn main() {}
Meta
1a91028
Error output
bug.rs:6:1: error: cycle detected when computing the super predicates of ‘TraitA’ [E0391]
6 | trait TraitA<A: TraitA> {
| ^~~~~
Backtrace
crab1: internal compiler error: in add_constrints_from_param, at rust/typecheck/rust-tyty-variance-analysis.cc:472
0x2c1ef7b internal_error(char const*, ...)
../../gcc/diagnostic-global-context.cc:787
0xb49f7d fancy_abort(char const*, int, char const*)
../../gcc/diagnostics/context.cc:1813
0x90fb0d Rust::TyTy::VarianceAnalysis::GenericTyVisitorCtx::add_constrints_from_param(Rust::TyTy::ParamType&, Rust::TyTy::VarianceAnalysis::Term)
../../gcc/rust/typecheck/rust-tyty-variance-analysis.cc:472
0xe77836 Rust::TyTy::VarianceAnalysis::VisitorBase<Rust::TyTy::VarianceAnalysis::Term>::visit(Rust::TyTy::ParamType&)
../../gcc/rust/typecheck/rust-tyty-variance-analysis-private.h:152
0xe755a6 Rust::TyTy::VarianceAnalysis::GenericTyVisitorCtx::add_constraints_from_ty(Rust::TyTy::BaseType*, Rust::TyTy::VarianceAnalysis::Term)
../../gcc/rust/typecheck/rust-tyty-variance-analysis.cc:399
0xe768ad Rust::TyTy::VarianceAnalysis::GenericTyVisitorCtx::process_type(Rust::TyTy::ADTType&)
../../gcc/rust/typecheck/rust-tyty-variance-analysis.cc:247
0xe76939 Rust::TyTy::VarianceAnalysis::GenericTyPerCrateCtx::process_type(Rust::TyTy::ADTType&)
../../gcc/rust/typecheck/rust-tyty-variance-analysis.cc:131
0xe96806 Rust::Resolver::TypeCheckItem::visit(Rust::HIR::Enum&)
../../gcc/rust/typecheck/rust-hir-type-check-item.cc:374
0xe9190d Rust::Resolver::TypeCheckItem::Resolve(Rust::HIR::Item&)
../../gcc/rust/typecheck/rust-hir-type-check-item.cc:57
0xe9190d Rust::Resolver::TypeCheckItem::Resolve(Rust::HIR::Item&)
../../gcc/rust/typecheck/rust-hir-type-check-item.cc:43
0xeb89ef ???
../../gcc/rust/typecheck/rust-hir-type-check-stmt.h:39
0xeb910b Rust::Resolver::TypeCheckStmt::Resolve(Rust::HIR::Stmt&)
../../gcc/rust/typecheck/rust-hir-type-check-stmt.cc:34
0xead564 Rust::Resolver::TypeCheckExpr::visit(Rust::HIR::BlockExpr&)
../../gcc/rust/typecheck/rust-hir-type-check-expr.cc:630
0xeabe1c Rust::Resolver::TypeCheckExpr::Resolve(Rust::HIR::Expr&)
../../gcc/rust/typecheck/rust-hir-type-check-expr.cc:51
0xe898b9 Rust::Resolver::TraitItemReference::resolve_item(Rust::HIR::TraitItemFunc&)
../../gcc/rust/typecheck/rust-hir-trait-resolve.cc:415
0xe8fb7d Rust::Resolver::TraitReference::on_resolved()
../../gcc/rust/typecheck/rust-hir-trait-reference.cc:353
0xe8ad0e Rust::Resolver::TraitResolver::resolve_trait(Rust::HIR::Trait*)
../../gcc/rust/typecheck/rust-hir-trait-resolve.cc:317
0xe8af46 Rust::Resolver::TraitResolver::Resolve(Rust::HIR::Trait&)
../../gcc/rust/typecheck/rust-hir-trait-resolve.cc:97
0xe91baf Rust::Resolver::TypeCheckItem::visit(Rust::HIR::Trait&)
../../gcc/rust/typecheck/rust-hir-type-check-item.cc:673
0xe9190d Rust::Resolver::TypeCheckItem::Resolve(Rust::HIR::Item&)
../../gcc/rust/typecheck/rust-hir-type-check-item.cc:57
../gccrs/build/gcc/crab1 bug.rs -frust-incomplete-and-experimental-compiler-do-not-use
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.
Research direction
Start with the reduced and original Rust examples in bug.rs, then inspect add_constrints_from_param at rust/typecheck/rust-tyty-variance-analysis.cc:472 and the reported variance-analysis call path. Reproduce with crab1 bug.rs -frust-incomplete-and-experimental-compiler-do-not-use; done means the input reports the expected E0391 cycle diagnostic without an internal compiler error.
Written by the indexing model from the issue text.
Assessment
- Tech stack
- cpp, rust
- Domain
- compilers
- Issue type
- Bug
- Difficulty
- 4/5
- Estimated time
- 3-5 days
- Activity status
- Stale
- Clarity
- Mostly clear
- Newbie friendliness
- 42/100