aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorMuhammad Mahad <mahadtxt@gmail.com>2023-08-15 21:29:03 +0500
committerCohenArthur <arthur.cohen@embecosm.com>2023-08-18 10:49:02 +0000
commit879a62f50dd693dba84e0e983e38d1480efaa69a (patch)
treecf380f02bae13e29fde4c8a41ceacf6ec5d042bf /gcc
parent8ac2e43fb27170442d26e03271ba8b8775f1eb84 (diff)
downloadgcc-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.cc5
-rw-r--r--gcc/testsuite/rust/compile/issue-1589.rs4
-rw-r--r--gcc/testsuite/rust/compile/trait-cycle.rs4
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 }