aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorRyutaro Okada <1015ryu88@gmail.com>2025-03-14 21:25:03 +0900
committerPhilip Herron <philip.herron@embecosm.com>2025-03-19 10:07:47 +0000
commit2c05d5858b708c6615430e5d01dc93f278e50dbc (patch)
treec4ac9ce5f898823ebc8b1f1f1c3dbf8c36121a3e /gcc
parent199b540046fa211d836b3f2246fd9973b4b14067 (diff)
downloadgcc-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.cc11
-rw-r--r--gcc/testsuite/rust/compile/extern_generics.rs8
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