Skip to content

Commit

Permalink
chore: create a regression test for #6420
Browse files Browse the repository at this point in the history
  • Loading branch information
TomAFrench committed Oct 31, 2024
1 parent e04b026 commit a7202d3
Showing 1 changed file with 49 additions and 0 deletions.
49 changes: 49 additions & 0 deletions compiler/noirc_frontend/src/tests/traits.rs
Original file line number Diff line number Diff line change
Expand Up @@ -340,3 +340,52 @@ fn removes_assumed_parent_traits_after_function_ends() {
"#;
assert_no_errors(src);
}

#[test]
fn trait_bounds_which_are_dependent_on_generic_types_are_resolved_correctly() {
let src = r#"
trait Foo {
fn foo() -> Field;
}
trait Bar<T>: Foo {
fn bar(self) -> Field {
self.foo()
}
}
struct MyStruct<T> {
inner: Field,
}
trait MarkerTrait {}
impl MarkerTrait for Field {}
// `MyStruct<T>` implements `Foo` only when its generic type `T` implements `MarkerTrait`.
impl<T> Foo for MyStruct<T>
where
T: MarkerTrait,
{
fn foo() -> Field {
42
}
}
// We expect this to succeed as `MyStruct<T>` satisfies `Bar`'s trait bounds
// of implementing `Foo` when `T` implements `MarkerTrait`.
impl<T> Bar<T> for MyStruct<T>
where
T: MarkerTrait,
{
fn bar(self) -> Field {
31415
}
}
fn main() {
let foo: MyStruct<Field> = MyStruct { inner: 42 };
let _ = foo.bar();
}
"#;
assert_no_errors(src);
}

0 comments on commit a7202d3

Please sign in to comment.