diff --git a/sway-core/src/transform/to_parsed_lang/convert_parse_tree.rs b/sway-core/src/transform/to_parsed_lang/convert_parse_tree.rs index e715a63ddc2..c7ddfb3471e 100644 --- a/sway-core/src/transform/to_parsed_lang/convert_parse_tree.rs +++ b/sway-core/src/transform/to_parsed_lang/convert_parse_tree.rs @@ -1129,6 +1129,13 @@ fn item_abi_to_abi_declaration( let trait_item = match annotated.value { ItemTraitItem::Fn(fn_signature, _) => { + if let Some(generics) = &fn_signature.generics { + return Err(handler.emit_err( + CompileError::GenericParametersNotSupportedInAbi { + span: generics.parameters.span(), + }, + )); + } let trait_fn = fn_signature_to_trait_fn( context, handler, diff --git a/sway-error/src/error.rs b/sway-error/src/error.rs index e73ea9dc158..7eb6251a617 100644 --- a/sway-error/src/error.rs +++ b/sway-error/src/error.rs @@ -1036,6 +1036,8 @@ pub enum CompileError { }, #[error("Associated types not supported in ABI.")] AssociatedTypeNotSupportedInAbi { span: Span }, + #[error("Generic parameters are not supported in ABI declarations.")] + GenericParametersNotSupportedInAbi { span: Span }, #[error("Cannot call ABI supertrait's method as a contract method: \"{fn_name}\"")] AbiSupertraitMethodCallAsContractCall { fn_name: Ident, span: Span }, #[error( @@ -1456,6 +1458,7 @@ impl Spanned for CompileError { AbiShadowsSuperAbiMethod { span, .. } => span.clone(), ConflictingSuperAbiMethods { span, .. } => span.clone(), AssociatedTypeNotSupportedInAbi { span, .. } => span.clone(), + GenericParametersNotSupportedInAbi { span, .. } => span.clone(), AbiSupertraitMethodCallAsContractCall { span, .. } => span.clone(), FunctionSelectorClash { span, .. } => span.clone(), TypeNotAllowed { span, .. } => span.clone(), diff --git a/test/src/e2e_vm_tests/test_programs/should_fail/generic_parameters_in_abi/Forc.lock b/test/src/e2e_vm_tests/test_programs/should_fail/generic_parameters_in_abi/Forc.lock new file mode 100644 index 00000000000..fcbd2705ad8 --- /dev/null +++ b/test/src/e2e_vm_tests/test_programs/should_fail/generic_parameters_in_abi/Forc.lock @@ -0,0 +1,4 @@ +[[package]] +name = 'generic_parameters_in_abi' +source = 'member' + diff --git a/test/src/e2e_vm_tests/test_programs/should_fail/generic_parameters_in_abi/Forc.toml b/test/src/e2e_vm_tests/test_programs/should_fail/generic_parameters_in_abi/Forc.toml new file mode 100644 index 00000000000..c2ad9111415 --- /dev/null +++ b/test/src/e2e_vm_tests/test_programs/should_fail/generic_parameters_in_abi/Forc.toml @@ -0,0 +1,6 @@ +[project] +authors = ["Fuel Labs "] +entry = "main.sw" +license = "Apache-2.0" +name = "generic_parameters_in_abi" + diff --git a/test/src/e2e_vm_tests/test_programs/should_fail/generic_parameters_in_abi/src/main.sw b/test/src/e2e_vm_tests/test_programs/should_fail/generic_parameters_in_abi/src/main.sw new file mode 100644 index 00000000000..ecf4c5889b6 --- /dev/null +++ b/test/src/e2e_vm_tests/test_programs/should_fail/generic_parameters_in_abi/src/main.sw @@ -0,0 +1,5 @@ +contract; + +abi Abi { + fn fun() -> bool; +} diff --git a/test/src/e2e_vm_tests/test_programs/should_fail/generic_parameters_in_abi/test.toml b/test/src/e2e_vm_tests/test_programs/should_fail/generic_parameters_in_abi/test.toml new file mode 100644 index 00000000000..4ba94c74d5e --- /dev/null +++ b/test/src/e2e_vm_tests/test_programs/should_fail/generic_parameters_in_abi/test.toml @@ -0,0 +1,4 @@ +category = "fail" + +# check: $()fn fun() -> bool; +# nextln: $()Generic parameters are not supported in ABI declarations.