Skip to content

Commit 55b9c00

Browse files
authored
Merge a141080 into 3d9d072
2 parents 3d9d072 + a141080 commit 55b9c00

File tree

2 files changed

+27
-2
lines changed

2 files changed

+27
-2
lines changed

compiler/noirc_frontend/src/elaborator/traits.rs

+2-2
Original file line numberDiff line numberDiff line change
@@ -288,10 +288,10 @@ pub(crate) fn check_trait_impl_method_matches_declaration(
288288
// Substitute each generic on the trait function with the corresponding generic on the impl function
289289
for (
290290
ResolvedGeneric { type_var: trait_fn_generic, .. },
291-
ResolvedGeneric { name, type_var: impl_fn_generic, .. },
291+
ResolvedGeneric { name, type_var: impl_fn_generic, kind, .. },
292292
) in trait_fn_meta.direct_generics.iter().zip(&meta.direct_generics)
293293
{
294-
let arg = Type::NamedGeneric(impl_fn_generic.clone(), name.clone(), Kind::Normal);
294+
let arg = Type::NamedGeneric(impl_fn_generic.clone(), name.clone(), kind.clone());
295295
bindings.insert(trait_fn_generic.id(), (trait_fn_generic.clone(), arg));
296296
}
297297

compiler/noirc_frontend/src/tests.rs

+25
Original file line numberDiff line numberDiff line change
@@ -3700,3 +3700,28 @@ fn use_non_u32_generic_in_struct() {
37003700
let errors = get_program_errors(src);
37013701
assert_eq!(errors.len(), 0);
37023702
}
3703+
3704+
#[test]
3705+
fn use_numeric_generic_in_trait_method() {
3706+
let src = r#"
3707+
trait Foo {
3708+
fn foo<let N: u32>(self, x: [u8; N]) -> Self;
3709+
}
3710+
3711+
struct Bar;
3712+
3713+
impl Foo for Bar {
3714+
fn foo<let N: u32>(self, _x: [u8; N]) -> Self {
3715+
self
3716+
}
3717+
}
3718+
3719+
fn main() {
3720+
let _ = Bar{}.foo([1,2,3]);
3721+
}
3722+
"#;
3723+
3724+
let errors = get_program_errors(src);
3725+
println!("{errors:?}");
3726+
assert_eq!(errors.len(), 0);
3727+
}

0 commit comments

Comments
 (0)