aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorPhilip Herron <herron.philip@googlemail.com>2025-02-04 17:15:15 +0000
committerArthur Cohen <arthur.cohen@embecosm.com>2025-03-24 13:07:04 +0100
commita34f4d5a817f777696a0b0ddf1328275c8a81538 (patch)
tree09d4b275974fcf25728458a18de3dcc28244368a /gcc
parent0c14d95298548b7bb0c504f28cf5c18111285db8 (diff)
downloadgcc-a34f4d5a817f777696a0b0ddf1328275c8a81538.zip
gcc-a34f4d5a817f777696a0b0ddf1328275c8a81538.tar.gz
gcc-a34f4d5a817f777696a0b0ddf1328275c8a81538.tar.bz2
gccrs: remove bad type checking diagnostic
This was a bad diagnostic added when I was working on slices and iterators also the name of the function is also bad. This is all about setting up associated types based on the current context of the bounds assocated with the associated trait bounds on this function. The tell tale is that this didnt have an associated rust error code so this is most definetly not the correct error diagnostic. Fixes Rust-GCC#3403 gcc/rust/ChangeLog: * typecheck/rust-tyty-subst.cc (SubstitutionRef::monomorphize): remove diagnostic gcc/testsuite/ChangeLog: * rust/compile/nr2/exclude: nr2 cant handle this * rust/compile/issue-3403.rs: New test. Signed-off-by: Philip Herron <herron.philip@googlemail.com>
Diffstat (limited to 'gcc')
-rw-r--r--gcc/rust/typecheck/rust-tyty-subst.cc21
-rw-r--r--gcc/testsuite/rust/compile/issue-3403.rs38
-rw-r--r--gcc/testsuite/rust/compile/nr2/exclude1
3 files changed, 40 insertions, 20 deletions
diff --git a/gcc/rust/typecheck/rust-tyty-subst.cc b/gcc/rust/typecheck/rust-tyty-subst.cc
index a12ad91..eb9e9dc 100644
--- a/gcc/rust/typecheck/rust-tyty-subst.cc
+++ b/gcc/rust/typecheck/rust-tyty-subst.cc
@@ -934,27 +934,8 @@ SubstitutionRef::monomorphize ()
auto associated
= Resolver::lookup_associated_impl_block (bound, binding,
&ambigious);
- if (associated == nullptr && ambigious)
- {
- // go for the first one? or error out?
- auto &mappings = Analysis::Mappings::get ();
- const auto &type_param = subst.get_generic_param ();
- const auto *trait_ref = bound.get ();
-
- rich_location r (line_table, type_param.get_locus ());
- r.add_range (bound.get_locus ());
- r.add_range (mappings.lookup_location (binding->get_ref ()));
-
- rust_error_at (r, "ambiguous type bound for trait %s and type %s",
- trait_ref->get_name ().c_str (),
- binding->get_name ().c_str ());
- return false;
- }
-
if (associated != nullptr)
- {
- associated->setup_associated_types (binding, bound);
- }
+ associated->setup_associated_types (binding, bound);
}
}
diff --git a/gcc/testsuite/rust/compile/issue-3403.rs b/gcc/testsuite/rust/compile/issue-3403.rs
new file mode 100644
index 0000000..ced6b4e
--- /dev/null
+++ b/gcc/testsuite/rust/compile/issue-3403.rs
@@ -0,0 +1,38 @@
+pub struct Foo {
+ a: i32,
+ // { dg-warning "field is never read" "" { target *-*-* } .-1 }
+}
+pub struct Bar(i32);
+
+#[lang = "sized"]
+trait Sized {}
+
+pub mod core {
+ pub mod default {
+ pub trait Default: Sized {
+ fn default() -> Self;
+ }
+
+ impl Default for i32 {
+ fn default() -> Self {
+ 0
+ }
+ }
+ }
+}
+
+impl ::core::default::Default for Bar {
+ #[inline]
+ fn default() -> Bar {
+ Bar(core::default::Default::default())
+ }
+}
+
+impl ::core::default::Default for Foo {
+ #[inline]
+ fn default() -> Foo {
+ Foo {
+ a: core::default::Default::default(),
+ }
+ }
+}
diff --git a/gcc/testsuite/rust/compile/nr2/exclude b/gcc/testsuite/rust/compile/nr2/exclude
index 5124194..6f6280d 100644
--- a/gcc/testsuite/rust/compile/nr2/exclude
+++ b/gcc/testsuite/rust/compile/nr2/exclude
@@ -123,4 +123,5 @@ derive-default1.rs
issue-3402-1.rs
for-loop1.rs
for-loop2.rs
+issue-3403.rs
# please don't delete the trailing newline