diff options
author | Muhammad Mahad <mahadtxt@gmail.com> | 2023-08-15 21:29:03 +0500 |
---|---|---|
committer | CohenArthur <arthur.cohen@embecosm.com> | 2023-08-18 10:49:02 +0000 |
commit | 879a62f50dd693dba84e0e983e38d1480efaa69a (patch) | |
tree | cf380f02bae13e29fde4c8a41ceacf6ec5d042bf /gcc | |
parent | 8ac2e43fb27170442d26e03271ba8b8775f1eb84 (diff) | |
download | gcc-879a62f50dd693dba84e0e983e38d1480efaa69a.zip gcc-879a62f50dd693dba84e0e983e38d1480efaa69a.tar.gz gcc-879a62f50dd693dba84e0e983e38d1480efaa69a.tar.bz2 |
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 <mahadtxt@gmail.com>
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/rust/typecheck/rust-hir-trait-resolve.cc | 5 | ||||
-rw-r--r-- | gcc/testsuite/rust/compile/issue-1589.rs | 4 | ||||
-rw-r--r-- | gcc/testsuite/rust/compile/trait-cycle.rs | 4 |
3 files changed, 10 insertions, 3 deletions
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 } |