diff --git a/gcc/rust/typecheck/rust-tyty-subst.cc b/gcc/rust/typecheck/rust-tyty-subst.cc index 976f6af12a5..26afe1bd491 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 00000000000..ced6b4efd97 --- /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 512419438db..6f6280d3b66 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