From 879a62f50dd693dba84e0e983e38d1480efaa69a Mon Sep 17 00:00:00 2001 From: Muhammad Mahad Date: Tue, 15 Aug 2023 21:29:03 +0500 Subject: 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 --- gcc/rust/typecheck/rust-hir-trait-resolve.cc | 5 ++++- gcc/testsuite/rust/compile/issue-1589.rs | 4 ++-- gcc/testsuite/rust/compile/trait-cycle.rs | 4 ++++ 3 files changed, 10 insertions(+), 3 deletions(-) create mode 100644 gcc/testsuite/rust/compile/trait-cycle.rs (limited to 'gcc') diff --git a/gcc/rust/typecheck/rust-hir-trait-resolve.cc b/gcc/rust/typecheck/rust-hir-trait-resolve.cc index 8b96a81..116e697 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 45f2415..1dd7a45 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 0000000..3bcadbb --- /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 } -- cgit v1.1