From b973eb94a52630da5606b44272b89198f60968cc Mon Sep 17 00:00:00 2001 From: Emmanuel Ugwu Date: Mon, 22 Jun 2026 19:02:02 +0100 Subject: [PATCH 1/2] Allow unstable attribute on foreign types and add stability test --- compiler/rustc_attr_parsing/src/attributes/stability.rs | 1 + tests/ui/lint/lint-stability.rs | 6 +++++- 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/compiler/rustc_attr_parsing/src/attributes/stability.rs b/compiler/rustc_attr_parsing/src/attributes/stability.rs index b38bb6d535770..734acb9ea21e7 100644 --- a/compiler/rustc_attr_parsing/src/attributes/stability.rs +++ b/compiler/rustc_attr_parsing/src/attributes/stability.rs @@ -40,6 +40,7 @@ const ALLOWED_TARGETS: AllowedTargets = AllowedTargets::AllowList(&[ Allow(Target::Static), Allow(Target::ForeignFn), Allow(Target::ForeignStatic), + Allow(Target::ForeignTy), Allow(Target::ExternCrate), ]); diff --git a/tests/ui/lint/lint-stability.rs b/tests/ui/lint/lint-stability.rs index f080b5e4bbeb1..21009b1e61db4 100644 --- a/tests/ui/lint/lint-stability.rs +++ b/tests/ui/lint/lint-stability.rs @@ -6,9 +6,13 @@ #![allow(deprecated)] #![allow(dead_code)] #![feature(staged_api)] - +#![feature(extern_types)] #![stable(feature = "rust1", since = "1.0.0")] +extern "C" { + #[unstable(feature = "fn_static", issue = "none")] + type Ty; +} #[macro_use] extern crate lint_stability; From 2592b4176d62f5310957cc5595d2ab0747326d3c Mon Sep 17 00:00:00 2001 From: Emmanuel Ugwu Date: Fri, 26 Jun 2026 22:34:26 +0100 Subject: [PATCH 2/2] Add test to confirm usage of unstable foreign type error Signed-off-by: Emmanuel Ugwu --- tests/ui/lint/auxiliary/lint_stability.rs | 6 ++++++ tests/ui/lint/lint-stability.rs | 7 +++---- 2 files changed, 9 insertions(+), 4 deletions(-) diff --git a/tests/ui/lint/auxiliary/lint_stability.rs b/tests/ui/lint/auxiliary/lint_stability.rs index 99c29dcdda677..bc2d47aebbc29 100644 --- a/tests/ui/lint/auxiliary/lint_stability.rs +++ b/tests/ui/lint/auxiliary/lint_stability.rs @@ -1,5 +1,6 @@ #![crate_name="lint_stability"] #![crate_type = "lib"] +#![feature(extern_types)] #![feature(staged_api)] #![feature(associated_type_defaults)] #![stable(feature = "lint_stability", since = "1.0.0")] @@ -186,3 +187,8 @@ macro_rules! macro_test_arg { macro_rules! macro_test_arg_nested { ($func:ident) => (macro_test_arg!($func())); } + +extern "C" { + #[unstable(feature = "unstable_test_feature", issue = "none")] + pub type UnstableForeignType; +} diff --git a/tests/ui/lint/lint-stability.rs b/tests/ui/lint/lint-stability.rs index 21009b1e61db4..c8712397189c7 100644 --- a/tests/ui/lint/lint-stability.rs +++ b/tests/ui/lint/lint-stability.rs @@ -9,10 +9,6 @@ #![feature(extern_types)] #![stable(feature = "rust1", since = "1.0.0")] -extern "C" { - #[unstable(feature = "fn_static", issue = "none")] - type Ty; -} #[macro_use] extern crate lint_stability; @@ -22,6 +18,9 @@ mod cross_crate { use lint_stability::*; + fn test_foreign_type(_: &mut UnstableForeignType) { //~ ERROR use of unstable library feature + } + fn test() { type Foo = MethodTester; let foo = MethodTester;