about summary refs log tree commit diff
diff options
context:
space:
mode:
authorSantiago Pastorino <spastorino@gmail.com>2024-06-28 23:13:33 -0300
committerSantiago Pastorino <spastorino@gmail.com>2024-06-28 23:13:33 -0300
commita62cbda57e23105d68d146cafce94b882882c0e1 (patch)
treeaa38453115059d1fb8532f5927dbc8481751d2a4
parent99f77a2eda555b50b518f74823ab636a20efb87f (diff)
downloadrust-a62cbda57e23105d68d146cafce94b882882c0e1.tar.gz
rust-a62cbda57e23105d68d146cafce94b882882c0e1.zip
Add feature diagnostic for unsafe_extern_blocks
-rw-r--r--compiler/rustc_ast_passes/src/ast_validation.rs10
-rw-r--r--tests/ui/feature-gates/feature-gate-unsafe-extern-blocks.stderr4
-rw-r--r--tests/ui/parser/unsafe-foreign-mod-2.stderr4
-rw-r--r--tests/ui/parser/unsafe-foreign-mod.stderr4
4 files changed, 21 insertions, 1 deletions
diff --git a/compiler/rustc_ast_passes/src/ast_validation.rs b/compiler/rustc_ast_passes/src/ast_validation.rs
index ba4b6130b60..d02b8510975 100644
--- a/compiler/rustc_ast_passes/src/ast_validation.rs
+++ b/compiler/rustc_ast_passes/src/ast_validation.rs
@@ -1088,7 +1088,15 @@ impl<'a> Visitor<'a> for AstValidator<'a> {
                             }
                         }
                     } else if let &Safety::Unsafe(span) = safety {
-                        this.dcx().emit_err(errors::UnsafeItem { span, kind: "extern block" });
+                        let mut diag = this
+                            .dcx()
+                            .create_err(errors::UnsafeItem { span, kind: "extern block" });
+                        rustc_session::parse::add_feature_diagnostics(
+                            &mut diag,
+                            self.session,
+                            sym::unsafe_extern_blocks,
+                        );
+                        diag.emit();
                     }
 
                     if abi.is_none() {
diff --git a/tests/ui/feature-gates/feature-gate-unsafe-extern-blocks.stderr b/tests/ui/feature-gates/feature-gate-unsafe-extern-blocks.stderr
index 84f00827c60..56534946308 100644
--- a/tests/ui/feature-gates/feature-gate-unsafe-extern-blocks.stderr
+++ b/tests/ui/feature-gates/feature-gate-unsafe-extern-blocks.stderr
@@ -3,6 +3,10 @@ error: extern block cannot be declared unsafe
    |
 LL | unsafe extern "C" {
    | ^^^^^^
+   |
+   = note: see issue #123743 <https://github.com/rust-lang/rust/issues/123743> for more information
+   = help: add `#![feature(unsafe_extern_blocks)]` to the crate attributes to enable
+   = note: this compiler was built on YYYY-MM-DD; consider upgrading it if it is out of date
 
 error[E0658]: `unsafe extern {}` blocks and `safe` keyword are experimental
   --> $DIR/feature-gate-unsafe-extern-blocks.rs:9:5
diff --git a/tests/ui/parser/unsafe-foreign-mod-2.stderr b/tests/ui/parser/unsafe-foreign-mod-2.stderr
index 77a383d5efa..07dbd5568d0 100644
--- a/tests/ui/parser/unsafe-foreign-mod-2.stderr
+++ b/tests/ui/parser/unsafe-foreign-mod-2.stderr
@@ -9,6 +9,10 @@ error: extern block cannot be declared unsafe
    |
 LL | extern "C" unsafe {
    |            ^^^^^^
+   |
+   = note: see issue #123743 <https://github.com/rust-lang/rust/issues/123743> for more information
+   = help: add `#![feature(unsafe_extern_blocks)]` to the crate attributes to enable
+   = note: this compiler was built on YYYY-MM-DD; consider upgrading it if it is out of date
 
 error: items in unadorned `extern` blocks cannot have safety qualifiers
   --> $DIR/unsafe-foreign-mod-2.rs:4:5
diff --git a/tests/ui/parser/unsafe-foreign-mod.stderr b/tests/ui/parser/unsafe-foreign-mod.stderr
index 77f6e93be10..60b918a89b3 100644
--- a/tests/ui/parser/unsafe-foreign-mod.stderr
+++ b/tests/ui/parser/unsafe-foreign-mod.stderr
@@ -3,6 +3,10 @@ error: extern block cannot be declared unsafe
    |
 LL | unsafe extern "C" {
    | ^^^^^^
+   |
+   = note: see issue #123743 <https://github.com/rust-lang/rust/issues/123743> for more information
+   = help: add `#![feature(unsafe_extern_blocks)]` to the crate attributes to enable
+   = note: this compiler was built on YYYY-MM-DD; consider upgrading it if it is out of date
 
 error: aborting due to 1 previous error