https://gcc.gnu.org/g:8ad4296118148eecf28ade7c6fc537771bdfca06
commit r15-8857-g8ad4296118148eecf28ade7c6fc537771bdfca06 Author: Ryutaro Okada <1015ry...@gmail.com> Date: Fri Mar 14 21:25:03 2025 +0900 gccrs: emit an error for type or const parameters on foreign items gcc/rust/ChangeLog: * typecheck/rust-hir-type-check-implitem.cc (TypeCheckTopLevelExternItem::visit): emit an error for type or const parameters on foreign items gcc/testsuite/ChangeLog: * rust/compile/extern_generics.rs: New test. Signed-off-by: Ryutaro Okada <1015ry...@gmail.com> Diff: --- gcc/rust/typecheck/rust-hir-type-check-implitem.cc | 11 +++++++++++ gcc/testsuite/rust/compile/extern_generics.rs | 8 ++++++++ 2 files changed, 19 insertions(+) diff --git a/gcc/rust/typecheck/rust-hir-type-check-implitem.cc b/gcc/rust/typecheck/rust-hir-type-check-implitem.cc index 7d31d3653ce1..a5ae54bf4930 100644 --- a/gcc/rust/typecheck/rust-hir-type-check-implitem.cc +++ b/gcc/rust/typecheck/rust-hir-type-check-implitem.cc @@ -86,9 +86,20 @@ TypeCheckTopLevelExternItem::visit (HIR::ExternalFunctionItem &function) case HIR::GenericParam::GenericKind::CONST: // FIXME: Skipping Lifetime and Const completely until better // handling. + if (parent.get_abi () != Rust::ABI::INTRINSIC) + { + rust_error_at (function.get_locus (), ErrorCode::E0044, + "foreign items may not have const parameters"); + } break; case HIR::GenericParam::GenericKind::TYPE: { + if (parent.get_abi () != Rust::ABI::INTRINSIC) + { + rust_error_at ( + function.get_locus (), ErrorCode::E0044, + "foreign items may not have type parameters"); + } auto param_type = TypeResolveGenericParam::Resolve (*generic_param); context->insert_type (generic_param->get_mappings (), diff --git a/gcc/testsuite/rust/compile/extern_generics.rs b/gcc/testsuite/rust/compile/extern_generics.rs new file mode 100644 index 000000000000..26f97a64ff5d --- /dev/null +++ b/gcc/testsuite/rust/compile/extern_generics.rs @@ -0,0 +1,8 @@ +#[lang="sized"] +trait Sized {} + + +// E0044 +fn main() { +extern "C" { fn some_func<T>(x: T); } // { dg-error "foreign items may not have type parameters .E0044." } +} \ No newline at end of file