Skip to content

Commit 2c05d58

Browse files
sakupan102philberty
authored andcommitted
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 <[email protected]>
1 parent 199b540 commit 2c05d58

File tree

2 files changed

+19
-0
lines changed

2 files changed

+19
-0
lines changed

gcc/rust/typecheck/rust-hir-type-check-implitem.cc

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -86,9 +86,20 @@ TypeCheckTopLevelExternItem::visit (HIR::ExternalFunctionItem &function)
8686
case HIR::GenericParam::GenericKind::CONST:
8787
// FIXME: Skipping Lifetime and Const completely until better
8888
// handling.
89+
if (parent.get_abi () != Rust::ABI::INTRINSIC)
90+
{
91+
rust_error_at (function.get_locus (), ErrorCode::E0044,
92+
"foreign items may not have const parameters");
93+
}
8994
break;
9095

9196
case HIR::GenericParam::GenericKind::TYPE: {
97+
if (parent.get_abi () != Rust::ABI::INTRINSIC)
98+
{
99+
rust_error_at (
100+
function.get_locus (), ErrorCode::E0044,
101+
"foreign items may not have type parameters");
102+
}
92103
auto param_type
93104
= TypeResolveGenericParam::Resolve (*generic_param);
94105
context->insert_type (generic_param->get_mappings (),
Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
#[lang="sized"]
2+
trait Sized {}
3+
4+
5+
// E0044
6+
fn main() {
7+
extern "C" { fn some_func<T>(x: T); } // { dg-error "foreign items may not have type parameters .E0044." }
8+
}

0 commit comments

Comments
 (0)