From: Muhammad Mahad Date: Tue, 15 Aug 2023 16:29:03 +0000 (+0500) Subject: gccrs: [E0391] Detected type dependency cycle X-Git-Tag: basepoints/gcc-15~2207 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=b620e1d19f19325afe1d49ee8e2b8f6782a19761;p=thirdparty%2Fgcc.git gccrs: [E0391] Detected type dependency cycle This errorcode & message emits when cycle detected when computing the super predicates of `x` which requires computing the super predicates of `y`, which again requires computing the super predicates of `x`, completing the cycle. gcc/rust/ChangeLog: * typecheck/rust-hir-trait-resolve.cc (TraitResolver::resolve_trait): Updated errorcode & more userfriendly message. gcc/testsuite/ChangeLog: * rust/compile/issue-1589.rs: Updated comment for dejagnu. * rust/compile/trait-cycle.rs: New relevant test. Signed-off-by: Muhammad Mahad --- diff --git a/gcc/rust/typecheck/rust-hir-trait-resolve.cc b/gcc/rust/typecheck/rust-hir-trait-resolve.cc index b99fe2341af5..1d6a9fbdd37e 100644 --- a/gcc/rust/typecheck/rust-hir-trait-resolve.cc +++ b/gcc/rust/typecheck/rust-hir-trait-resolve.cc @@ -156,7 +156,10 @@ TraitResolver::resolve_trait (HIR::Trait *trait_reference) DefId trait_id = trait_reference->get_mappings ().get_defid (); if (context->trait_query_in_progress (trait_id)) { - rust_error_at (trait_reference->get_locus (), "trait cycle detected"); + rust_error_at ( + trait_reference->get_locus (), ErrorCode::E0391, + "cycle detected when computing the super predicates of %qs", + trait_reference->get_name ().as_string ().c_str ()); return &TraitReference::error_node (); } diff --git a/gcc/testsuite/rust/compile/issue-1589.rs b/gcc/testsuite/rust/compile/issue-1589.rs index 45f2415a8131..1dd7a45286c4 100644 --- a/gcc/testsuite/rust/compile/issue-1589.rs +++ b/gcc/testsuite/rust/compile/issue-1589.rs @@ -2,7 +2,7 @@ pub trait Sized {} pub trait A: B {} -// { dg-error "trait cycle detected" "" { target *-*-* } .-1 } +// { dg-error "cycle detected when computing the super predicates of .A." "" { target *-*-* } .-1 } pub trait B: A {} -// { dg-error "trait cycle detected" "" { target *-*-* } .-1 } +// { dg-error "cycle detected when computing the super predicates of .B." "" { target *-*-* } .-1 } diff --git a/gcc/testsuite/rust/compile/trait-cycle.rs b/gcc/testsuite/rust/compile/trait-cycle.rs new file mode 100644 index 000000000000..3bcadbbdbd77 --- /dev/null +++ b/gcc/testsuite/rust/compile/trait-cycle.rs @@ -0,0 +1,4 @@ +pub trait FirstTrait: SecondTrait {} +// { dg-error "cycle detected when computing the super predicates of .FirstTrait." "" { target *-*-* } .-1 } +pub trait SecondTrait: FirstTrait {} +// { dg-error "cycle detected when computing the super predicates of .SecondTrait." "" { target *-*-* } .-1 }