Skip to content
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.

Commit 6b33843

Browse files
authoredJun 26, 2024
Rollup merge of rust-lang#126973 - chenyukang:yukang-fix-126756-unsafe-suggestion-error, r=spastorino
Fix bad replacement for unsafe extern block suggestion Fixes rust-lang#126756 r? `@spastorino` link rust-lang#123743
2 parents 54d49eb + 0addda6 commit 6b33843

10 files changed

+75
-26
lines changed
 

‎compiler/rustc_ast_passes/src/ast_validation.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -464,7 +464,7 @@ impl<'a> AstValidator<'a> {
464464
{
465465
self.dcx().emit_err(errors::InvalidSafetyOnExtern {
466466
item_span: span,
467-
block: self.current_extern_span(),
467+
block: self.current_extern_span().shrink_to_lo(),
468468
});
469469
}
470470
}

‎compiler/rustc_ast_passes/src/errors.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -221,7 +221,7 @@ pub enum ExternBlockSuggestion {
221221
pub struct InvalidSafetyOnExtern {
222222
#[primary_span]
223223
pub item_span: Span,
224-
#[suggestion(code = "", applicability = "maybe-incorrect")]
224+
#[suggestion(code = "unsafe ", applicability = "machine-applicable", style = "verbose")]
225225
pub block: Span,
226226
}
227227

‎tests/ui/parser/fn-header-semantic-fail.stderr

+10-6
Original file line numberDiff line numberDiff line change
@@ -81,11 +81,13 @@ LL | async fn fe1();
8181
error: items in unadorned `extern` blocks cannot have safety qualifiers
8282
--> $DIR/fn-header-semantic-fail.rs:47:9
8383
|
84-
LL | extern "C" {
85-
| ---------- help: add unsafe to this `extern` block
86-
LL | async fn fe1();
8784
LL | unsafe fn fe2();
8885
| ^^^^^^^^^^^^^^^^
86+
|
87+
help: add unsafe to this `extern` block
88+
|
89+
LL | unsafe extern "C" {
90+
| ++++++
8991

9092
error: functions in `extern` blocks cannot have qualifiers
9193
--> $DIR/fn-header-semantic-fail.rs:48:9
@@ -135,11 +137,13 @@ LL | const async unsafe extern "C" fn fe5();
135137
error: items in unadorned `extern` blocks cannot have safety qualifiers
136138
--> $DIR/fn-header-semantic-fail.rs:50:9
137139
|
138-
LL | extern "C" {
139-
| ---------- help: add unsafe to this `extern` block
140-
...
141140
LL | const async unsafe extern "C" fn fe5();
142141
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
142+
|
143+
help: add unsafe to this `extern` block
144+
|
145+
LL | unsafe extern "C" {
146+
| ++++++
143147

144148
error: functions cannot be both `const` and `async`
145149
--> $DIR/fn-header-semantic-fail.rs:50:9

‎tests/ui/parser/no-const-fn-in-extern-block.stderr

+5-3
Original file line numberDiff line numberDiff line change
@@ -18,11 +18,13 @@ LL | const unsafe fn bar();
1818
error: items in unadorned `extern` blocks cannot have safety qualifiers
1919
--> $DIR/no-const-fn-in-extern-block.rs:4:5
2020
|
21-
LL | extern "C" {
22-
| ---------- help: add unsafe to this `extern` block
23-
...
2421
LL | const unsafe fn bar();
2522
| ^^^^^^^^^^^^^^^^^^^^^^
23+
|
24+
help: add unsafe to this `extern` block
25+
|
26+
LL | unsafe extern "C" {
27+
| ++++++
2628

2729
error: aborting due to 3 previous errors
2830

‎tests/ui/parser/unsafe-foreign-mod-2.stderr

+5-3
Original file line numberDiff line numberDiff line change
@@ -13,11 +13,13 @@ LL | extern "C" unsafe {
1313
error: items in unadorned `extern` blocks cannot have safety qualifiers
1414
--> $DIR/unsafe-foreign-mod-2.rs:4:5
1515
|
16-
LL | extern "C" unsafe {
17-
| ----------------- help: add unsafe to this `extern` block
18-
...
1916
LL | unsafe fn foo();
2017
| ^^^^^^^^^^^^^^^^
18+
|
19+
help: add unsafe to this `extern` block
20+
|
21+
LL | unsafe extern "C" unsafe {
22+
| ++++++
2123

2224
error: aborting due to 3 previous errors
2325

Original file line numberDiff line numberDiff line change
@@ -1,20 +1,24 @@
11
error: items in unadorned `extern` blocks cannot have safety qualifiers
22
--> $DIR/safe-unsafe-on-unadorned-extern-block.rs:10:5
33
|
4-
LL | extern "C" {
5-
| ---------- help: add unsafe to this `extern` block
6-
LL |
74
LL | safe static TEST1: i32;
85
| ^^^^^^^^^^^^^^^^^^^^^^^
6+
|
7+
help: add unsafe to this `extern` block
8+
|
9+
LL | unsafe extern "C" {
10+
| ++++++
911

1012
error: items in unadorned `extern` blocks cannot have safety qualifiers
1113
--> $DIR/safe-unsafe-on-unadorned-extern-block.rs:12:5
1214
|
13-
LL | extern "C" {
14-
| ---------- help: add unsafe to this `extern` block
15-
...
1615
LL | safe fn test1(i: i32);
1716
| ^^^^^^^^^^^^^^^^^^^^^^
17+
|
18+
help: add unsafe to this `extern` block
19+
|
20+
LL | unsafe extern "C" {
21+
| ++++++
1822

1923
error: aborting due to 2 previous errors
2024

‎tests/ui/rust-2024/unsafe-extern-blocks/safe-unsafe-on-unadorned-extern-block.edition2024.stderr

+10-6
Original file line numberDiff line numberDiff line change
@@ -13,20 +13,24 @@ LL | | }
1313
error: items in unadorned `extern` blocks cannot have safety qualifiers
1414
--> $DIR/safe-unsafe-on-unadorned-extern-block.rs:10:5
1515
|
16-
LL | extern "C" {
17-
| ---------- help: add unsafe to this `extern` block
18-
LL |
1916
LL | safe static TEST1: i32;
2017
| ^^^^^^^^^^^^^^^^^^^^^^^
18+
|
19+
help: add unsafe to this `extern` block
20+
|
21+
LL | unsafe extern "C" {
22+
| ++++++
2123

2224
error: items in unadorned `extern` blocks cannot have safety qualifiers
2325
--> $DIR/safe-unsafe-on-unadorned-extern-block.rs:12:5
2426
|
25-
LL | extern "C" {
26-
| ---------- help: add unsafe to this `extern` block
27-
...
2827
LL | safe fn test1(i: i32);
2928
| ^^^^^^^^^^^^^^^^^^^^^^
29+
|
30+
help: add unsafe to this `extern` block
31+
|
32+
LL | unsafe extern "C" {
33+
| ++++++
3034

3135
error: aborting due to 3 previous errors
3236

Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
//@ run-rustfix
2+
3+
#![feature(unsafe_extern_blocks)]
4+
#![allow(dead_code)]
5+
6+
unsafe extern "C" {
7+
unsafe fn foo(); //~ ERROR items in unadorned `extern` blocks cannot have safety qualifiers
8+
}
9+
10+
fn main() {}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
//@ run-rustfix
2+
3+
#![feature(unsafe_extern_blocks)]
4+
#![allow(dead_code)]
5+
6+
extern "C" {
7+
unsafe fn foo(); //~ ERROR items in unadorned `extern` blocks cannot have safety qualifiers
8+
}
9+
10+
fn main() {}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
error: items in unadorned `extern` blocks cannot have safety qualifiers
2+
--> $DIR/unsafe-on-extern-block-issue-126756.rs:7:5
3+
|
4+
LL | unsafe fn foo();
5+
| ^^^^^^^^^^^^^^^^
6+
|
7+
help: add unsafe to this `extern` block
8+
|
9+
LL | unsafe extern "C" {
10+
| ++++++
11+
12+
error: aborting due to 1 previous error
13+

0 commit comments

Comments
 (0)
Please sign in to comment.