diff options
author | Ryutaro Okada <1015ryu88@gmail.com> | 2025-03-14 21:25:03 +0900 |
---|---|---|
committer | Philip Herron <philip.herron@embecosm.com> | 2025-03-19 10:07:47 +0000 |
commit | 2c05d5858b708c6615430e5d01dc93f278e50dbc (patch) | |
tree | c4ac9ce5f898823ebc8b1f1f1c3dbf8c36121a3e /gcc | |
parent | 199b540046fa211d836b3f2246fd9973b4b14067 (diff) | |
download | gcc-2c05d5858b708c6615430e5d01dc93f278e50dbc.zip gcc-2c05d5858b708c6615430e5d01dc93f278e50dbc.tar.gz gcc-2c05d5858b708c6615430e5d01dc93f278e50dbc.tar.bz2 |
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 <1015ryu88@gmail.com>
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/rust/typecheck/rust-hir-type-check-implitem.cc | 11 | ||||
-rw-r--r-- | gcc/testsuite/rust/compile/extern_generics.rs | 8 |
2 files changed, 19 insertions, 0 deletions
diff --git a/gcc/rust/typecheck/rust-hir-type-check-implitem.cc b/gcc/rust/typecheck/rust-hir-type-check-implitem.cc index 31164c1..18ac0dd 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 0000000..26f97a6 --- /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 |