diff --git a/compiler/noirc_frontend/src/elaborator/trait_impls.rs b/compiler/noirc_frontend/src/elaborator/trait_impls.rs index 9ce0902518d..f3a69d41498 100644 --- a/compiler/noirc_frontend/src/elaborator/trait_impls.rs +++ b/compiler/noirc_frontend/src/elaborator/trait_impls.rs @@ -94,7 +94,7 @@ impl Elaborator<'_> { if overrides.len() > 1 { self.push_err(DefCollectorErrorKind::Duplicate { - typ: DuplicateType::TraitAssociatedFunction, + typ: DuplicateType::TraitAssociatedItem, first_def: overrides[0].2.name_ident().clone(), second_def: overrides[1].2.name_ident().clone(), }); diff --git a/compiler/noirc_frontend/src/hir/def_collector/dc_mod.rs b/compiler/noirc_frontend/src/hir/def_collector/dc_mod.rs index 221e7ebc521..1cd56a24564 100644 --- a/compiler/noirc_frontend/src/hir/def_collector/dc_mod.rs +++ b/compiler/noirc_frontend/src/hir/def_collector/dc_mod.rs @@ -593,7 +593,7 @@ impl ModCollector<'_> { } Err((first_def, second_def)) => { let error = DefCollectorErrorKind::Duplicate { - typ: DuplicateType::TraitAssociatedFunction, + typ: DuplicateType::TraitAssociatedItem, first_def, second_def, }; @@ -618,7 +618,7 @@ impl ModCollector<'_> { .declare_global(name.clone(), ItemVisibility::Public, global_id) { let error = DefCollectorErrorKind::Duplicate { - typ: DuplicateType::TraitAssociatedConst, + typ: DuplicateType::TraitAssociatedItem, first_def, second_def, }; @@ -646,7 +646,7 @@ impl ModCollector<'_> { ) { let error = DefCollectorErrorKind::Duplicate { - typ: DuplicateType::TraitAssociatedType, + typ: DuplicateType::TraitAssociatedItem, first_def, second_def, }; diff --git a/compiler/noirc_frontend/src/hir/def_collector/errors.rs b/compiler/noirc_frontend/src/hir/def_collector/errors.rs index a78ef2a0d42..5b831da5a58 100644 --- a/compiler/noirc_frontend/src/hir/def_collector/errors.rs +++ b/compiler/noirc_frontend/src/hir/def_collector/errors.rs @@ -17,9 +17,7 @@ pub enum DuplicateType { Import, Trait, TraitImplementation, - TraitAssociatedType, - TraitAssociatedConst, - TraitAssociatedFunction, + TraitAssociatedItem, StructField, EnumVariant, } @@ -145,9 +143,7 @@ impl fmt::Display for DuplicateType { DuplicateType::Trait => write!(f, "trait definition"), DuplicateType::TraitImplementation => write!(f, "trait implementation"), DuplicateType::Import => write!(f, "import"), - DuplicateType::TraitAssociatedType => write!(f, "trait associated type"), - DuplicateType::TraitAssociatedConst => write!(f, "trait associated constant"), - DuplicateType::TraitAssociatedFunction => write!(f, "trait associated function"), + DuplicateType::TraitAssociatedItem => write!(f, "trait associated item"), DuplicateType::StructField => write!(f, "struct field"), DuplicateType::EnumVariant => write!(f, "enum variant"), } diff --git a/compiler/noirc_frontend/src/tests.rs b/compiler/noirc_frontend/src/tests.rs index d23db713b0e..33a4268b941 100644 --- a/compiler/noirc_frontend/src/tests.rs +++ b/compiler/noirc_frontend/src/tests.rs @@ -453,13 +453,13 @@ fn check_trait_implementation_duplicate_method() { impl Default2 for Foo { // Duplicate trait methods should not compile fn default(x: Field, y: Field) -> Field { - ~~~~~~~ First trait associated function found here + ~~~~~~~ First trait associated item found here y + 2 * x } // Duplicate trait methods should not compile fn default(x: Field, y: Field) -> Field { - ^^^^^^^ Duplicate definitions of trait associated function with name default found - ~~~~~~~ Second trait associated function found here + ^^^^^^^ Duplicate definitions of trait associated item with name default found + ~~~~~~~ Second trait associated item found here x + 2 * y } } diff --git a/test_programs/compile_failure/trait_associated_items_clash/Nargo.toml b/test_programs/compile_failure/trait_associated_items_clash/Nargo.toml new file mode 100644 index 00000000000..140cf11d04a --- /dev/null +++ b/test_programs/compile_failure/trait_associated_items_clash/Nargo.toml @@ -0,0 +1,6 @@ +[package] +name = "trait_associated_items_clash" +type = "bin" +authors = [""] + +[dependencies] diff --git a/test_programs/compile_failure/trait_associated_items_clash/src/main.nr b/test_programs/compile_failure/trait_associated_items_clash/src/main.nr new file mode 100644 index 00000000000..2fd488aae7c --- /dev/null +++ b/test_programs/compile_failure/trait_associated_items_clash/src/main.nr @@ -0,0 +1,7 @@ +pub trait Foo { + let N: u32; + + fn N() {} +} + +fn main() {} diff --git a/tooling/nargo_cli/tests/snapshots/compile_failure/dup_trait_items_1/execute__tests__stderr.snap b/tooling/nargo_cli/tests/snapshots/compile_failure/dup_trait_items_1/execute__tests__stderr.snap index d986cf29f9b..03ad19e42f7 100644 --- a/tooling/nargo_cli/tests/snapshots/compile_failure/dup_trait_items_1/execute__tests__stderr.snap +++ b/tooling/nargo_cli/tests/snapshots/compile_failure/dup_trait_items_1/execute__tests__stderr.snap @@ -9,13 +9,13 @@ warning: unused trait MyTrait │ ------- unused trait │ -error: Duplicate definitions of trait associated function with name SomeFunc found +error: Duplicate definitions of trait associated item with name SomeFunc found ┌─ src/main.nr:2:6 │ 2 │ fn SomeFunc(); - │ -------- First trait associated function found here + │ -------- First trait associated item found here 3 │ fn SomeFunc(); - │ -------- Second trait associated function found here + │ -------- Second trait associated item found here │ Aborting due to 1 previous error diff --git a/tooling/nargo_cli/tests/snapshots/compile_failure/dup_trait_items_2/execute__tests__stderr.snap b/tooling/nargo_cli/tests/snapshots/compile_failure/dup_trait_items_2/execute__tests__stderr.snap index 1f04d42fda3..8f4f49c1484 100644 --- a/tooling/nargo_cli/tests/snapshots/compile_failure/dup_trait_items_2/execute__tests__stderr.snap +++ b/tooling/nargo_cli/tests/snapshots/compile_failure/dup_trait_items_2/execute__tests__stderr.snap @@ -9,13 +9,13 @@ warning: unused trait MyTrait │ ------- unused trait │ -error: Duplicate definitions of trait associated constant with name SomeConst found +error: Duplicate definitions of trait associated item with name SomeConst found ┌─ src/main.nr:2:7 │ 2 │ let SomeConst: u32; - │ --------- First trait associated constant found here + │ --------- First trait associated item found here 3 │ let SomeConst: Field; - │ --------- Second trait associated constant found here + │ --------- Second trait associated item found here │ Aborting due to 1 previous error diff --git a/tooling/nargo_cli/tests/snapshots/compile_failure/dup_trait_items_3/execute__tests__stderr.snap b/tooling/nargo_cli/tests/snapshots/compile_failure/dup_trait_items_3/execute__tests__stderr.snap index 0e3b368f3a3..7270acab898 100644 --- a/tooling/nargo_cli/tests/snapshots/compile_failure/dup_trait_items_3/execute__tests__stderr.snap +++ b/tooling/nargo_cli/tests/snapshots/compile_failure/dup_trait_items_3/execute__tests__stderr.snap @@ -9,13 +9,13 @@ warning: unused trait MyTrait │ ------- unused trait │ -error: Duplicate definitions of trait associated type with name SomeType found +error: Duplicate definitions of trait associated item with name SomeType found ┌─ src/main.nr:2:8 │ 2 │ type SomeType; - │ -------- First trait associated type found here + │ -------- First trait associated item found here 3 │ type SomeType; - │ -------- Second trait associated type found here + │ -------- Second trait associated item found here │ Aborting due to 1 previous error diff --git a/tooling/nargo_cli/tests/snapshots/compile_failure/dup_trait_items_4/execute__tests__stderr.snap b/tooling/nargo_cli/tests/snapshots/compile_failure/dup_trait_items_4/execute__tests__stderr.snap index cfc61abd30c..a8b833ae941 100644 --- a/tooling/nargo_cli/tests/snapshots/compile_failure/dup_trait_items_4/execute__tests__stderr.snap +++ b/tooling/nargo_cli/tests/snapshots/compile_failure/dup_trait_items_4/execute__tests__stderr.snap @@ -9,13 +9,13 @@ warning: unused trait MyTrait │ ------- unused trait │ -error: Duplicate definitions of trait associated function with name MyItem found +error: Duplicate definitions of trait associated item with name MyItem found ┌─ src/main.nr:2:7 │ 2 │ let MyItem: u32; - │ ------ First trait associated function found here + │ ------ First trait associated item found here 3 │ fn MyItem(); - │ ------ Second trait associated function found here + │ ------ Second trait associated item found here │ Aborting due to 1 previous error diff --git a/tooling/nargo_cli/tests/snapshots/compile_failure/dup_trait_items_5/execute__tests__stderr.snap b/tooling/nargo_cli/tests/snapshots/compile_failure/dup_trait_items_5/execute__tests__stderr.snap index fcf871a5e13..8225f835212 100644 --- a/tooling/nargo_cli/tests/snapshots/compile_failure/dup_trait_items_5/execute__tests__stderr.snap +++ b/tooling/nargo_cli/tests/snapshots/compile_failure/dup_trait_items_5/execute__tests__stderr.snap @@ -9,13 +9,13 @@ warning: unused trait MyTrait │ ------- unused trait │ -error: Duplicate definitions of trait associated constant with name MyItem found +error: Duplicate definitions of trait associated item with name MyItem found ┌─ src/main.nr:2:6 │ 2 │ fn MyItem(); - │ ------ First trait associated constant found here + │ ------ First trait associated item found here 3 │ let MyItem: u32; - │ ------ Second trait associated constant found here + │ ------ Second trait associated item found here │ Aborting due to 1 previous error diff --git a/tooling/nargo_cli/tests/snapshots/compile_failure/dup_trait_items_6/execute__tests__stderr.snap b/tooling/nargo_cli/tests/snapshots/compile_failure/dup_trait_items_6/execute__tests__stderr.snap index 5e1941acd9a..ddff8255bf4 100644 --- a/tooling/nargo_cli/tests/snapshots/compile_failure/dup_trait_items_6/execute__tests__stderr.snap +++ b/tooling/nargo_cli/tests/snapshots/compile_failure/dup_trait_items_6/execute__tests__stderr.snap @@ -9,13 +9,13 @@ warning: struct `MyStruct` is never constructed │ -------- struct is never constructed │ -error: Duplicate definitions of trait associated function with name SomeFunc found +error: Duplicate definitions of trait associated item with name SomeFunc found ┌─ src/main.nr:2:6 │ 2 │ fn SomeFunc() { }; - │ -------- First trait associated function found here + │ -------- First trait associated item found here 3 │ fn SomeFunc() { }; - │ -------- Second trait associated function found here + │ -------- Second trait associated item found here │ error: Expected a trait item but found ';' diff --git a/tooling/nargo_cli/tests/snapshots/compile_failure/noirc_frontend_tests_check_trait_implementation_duplicate_method/execute__tests__stderr.snap b/tooling/nargo_cli/tests/snapshots/compile_failure/noirc_frontend_tests_check_trait_implementation_duplicate_method/execute__tests__stderr.snap index 2a47ab51502..d8fd3b7ab12 100644 --- a/tooling/nargo_cli/tests/snapshots/compile_failure/noirc_frontend_tests_check_trait_implementation_duplicate_method/execute__tests__stderr.snap +++ b/tooling/nargo_cli/tests/snapshots/compile_failure/noirc_frontend_tests_check_trait_implementation_duplicate_method/execute__tests__stderr.snap @@ -2,14 +2,14 @@ source: tooling/nargo_cli/tests/execute.rs expression: stderr --- -error: Duplicate definitions of trait associated function with name default found +error: Duplicate definitions of trait associated item with name default found ┌─ src/main.nr:13:12 │ 13 │ fn default(x: Field, y: Field) -> Field { - │ ------- First trait associated function found here + │ ------- First trait associated item found here · 17 │ fn default(x: Field, y: Field) -> Field { - │ ------- Second trait associated function found here + │ ------- Second trait associated item found here │ Aborting due to 1 previous error diff --git a/tooling/nargo_cli/tests/snapshots/compile_failure/trait_associated_items_clash/execute__tests__stderr.snap b/tooling/nargo_cli/tests/snapshots/compile_failure/trait_associated_items_clash/execute__tests__stderr.snap new file mode 100644 index 00000000000..6f522e6b140 --- /dev/null +++ b/tooling/nargo_cli/tests/snapshots/compile_failure/trait_associated_items_clash/execute__tests__stderr.snap @@ -0,0 +1,15 @@ +--- +source: tooling/nargo_cli/tests/execute.rs +expression: stderr +--- +error: Duplicate definitions of trait associated item with name N found + ┌─ src/main.nr:2:9 + │ +2 │ let N: u32; + │ - First trait associated item found here +3 │ +4 │ fn N() {} + │ - Second trait associated item found here + │ + +Aborting due to 1 previous error