mirror of
https://github.com/rust-lang/rust.git
synced 2024-11-24 07:44:10 +00:00
Rollup merge of #83936 - crlf0710:disallow_extern_block_non_ascii, r=Manishearth
Disable using non-ascii identifiers in extern blocks. Fixes #83923.
This commit is contained in:
commit
9c688cd2a2
@ -532,6 +532,25 @@ impl<'a> AstValidator<'a> {
|
||||
}
|
||||
}
|
||||
|
||||
/// An item in `extern { ... }` cannot use non-ascii identifier.
|
||||
fn check_foreign_item_ascii_only(&self, ident: Ident) {
|
||||
let symbol_str = ident.as_str();
|
||||
if !symbol_str.is_ascii() {
|
||||
let n = 83942;
|
||||
self.err_handler()
|
||||
.struct_span_err(
|
||||
ident.span,
|
||||
"items in `extern` blocks cannot use non-ascii identifiers",
|
||||
)
|
||||
.span_label(self.current_extern_span(), "in this `extern` block")
|
||||
.note(&format!(
|
||||
"This limitation may be lifted in the future; see issue #{} <https://github.com/rust-lang/rust/issues/{}> for more information",
|
||||
n, n,
|
||||
))
|
||||
.emit();
|
||||
}
|
||||
}
|
||||
|
||||
/// Reject C-varadic type unless the function is foreign,
|
||||
/// or free and `unsafe extern "C"` semantically.
|
||||
fn check_c_varadic_type(&self, fk: FnKind<'a>) {
|
||||
@ -592,7 +611,7 @@ impl<'a> AstValidator<'a> {
|
||||
self.session,
|
||||
ident.span,
|
||||
E0754,
|
||||
"trying to load file for module `{}` with non ascii identifer name",
|
||||
"trying to load file for module `{}` with non-ascii identifier name",
|
||||
ident.name
|
||||
)
|
||||
.help("consider using `#[path]` attribute to specify filesystem path")
|
||||
@ -1103,15 +1122,18 @@ impl<'a> Visitor<'a> for AstValidator<'a> {
|
||||
self.check_defaultness(fi.span, *def);
|
||||
self.check_foreign_fn_bodyless(fi.ident, body.as_deref());
|
||||
self.check_foreign_fn_headerless(fi.ident, fi.span, sig.header);
|
||||
self.check_foreign_item_ascii_only(fi.ident);
|
||||
}
|
||||
ForeignItemKind::TyAlias(box TyAliasKind(def, generics, bounds, body)) => {
|
||||
self.check_defaultness(fi.span, *def);
|
||||
self.check_foreign_kind_bodyless(fi.ident, "type", body.as_ref().map(|b| b.span));
|
||||
self.check_type_no_bounds(bounds, "`extern` blocks");
|
||||
self.check_foreign_ty_genericless(generics);
|
||||
self.check_foreign_item_ascii_only(fi.ident);
|
||||
}
|
||||
ForeignItemKind::Static(_, _, body) => {
|
||||
self.check_foreign_kind_bodyless(fi.ident, "static", body.as_ref().map(|b| b.span));
|
||||
self.check_foreign_item_ascii_only(fi.ident);
|
||||
}
|
||||
ForeignItemKind::MacCall(..) => {}
|
||||
}
|
||||
|
@ -28,6 +28,7 @@ enum Bär { //~ ERROR non-ascii idents
|
||||
|
||||
extern "C" {
|
||||
fn qüx(); //~ ERROR non-ascii idents
|
||||
//~^ ERROR items in `extern` blocks
|
||||
}
|
||||
|
||||
fn main() {}
|
||||
|
@ -1,3 +1,13 @@
|
||||
error: items in `extern` blocks cannot use non-ascii identifiers
|
||||
--> $DIR/feature-gate-non_ascii_idents.rs:30:8
|
||||
|
|
||||
LL | extern "C" {
|
||||
| ---------- in this `extern` block
|
||||
LL | fn qüx();
|
||||
| ^^^
|
||||
|
|
||||
= note: This limitation may be lifted in the future; see issue #83942 <https://github.com/rust-lang/rust/issues/83942> for more information
|
||||
|
||||
error[E0658]: non-ascii idents are not fully supported
|
||||
--> $DIR/feature-gate-non_ascii_idents.rs:1:22
|
||||
|
|
||||
@ -115,6 +125,6 @@ LL | fn qüx();
|
||||
= note: see issue #55467 <https://github.com/rust-lang/rust/issues/55467> for more information
|
||||
= help: add `#![feature(non_ascii_idents)]` to the crate attributes to enable
|
||||
|
||||
error: aborting due to 13 previous errors
|
||||
error: aborting due to 14 previous errors
|
||||
|
||||
For more information about this error, try `rustc --explain E0658`.
|
||||
|
10
src/test/ui/rfc-2457/extern_block_nonascii_forbidden.rs
Normal file
10
src/test/ui/rfc-2457/extern_block_nonascii_forbidden.rs
Normal file
@ -0,0 +1,10 @@
|
||||
#![feature(extern_types)]
|
||||
#![feature(non_ascii_idents)]
|
||||
|
||||
extern "C" {
|
||||
type 一; //~ items in `extern` blocks cannot use non-ascii identifiers
|
||||
fn 二(); //~ items in `extern` blocks cannot use non-ascii identifiers
|
||||
static 三: usize; //~ items in `extern` blocks cannot use non-ascii identifiers
|
||||
}
|
||||
|
||||
fn main() {}
|
34
src/test/ui/rfc-2457/extern_block_nonascii_forbidden.stderr
Normal file
34
src/test/ui/rfc-2457/extern_block_nonascii_forbidden.stderr
Normal file
@ -0,0 +1,34 @@
|
||||
error: items in `extern` blocks cannot use non-ascii identifiers
|
||||
--> $DIR/extern_block_nonascii_forbidden.rs:5:10
|
||||
|
|
||||
LL | extern "C" {
|
||||
| ---------- in this `extern` block
|
||||
LL | type 一;
|
||||
| ^^
|
||||
|
|
||||
= note: This limitation may be lifted in the future; see issue #83942 <https://github.com/rust-lang/rust/issues/83942> for more information
|
||||
|
||||
error: items in `extern` blocks cannot use non-ascii identifiers
|
||||
--> $DIR/extern_block_nonascii_forbidden.rs:6:8
|
||||
|
|
||||
LL | extern "C" {
|
||||
| ---------- in this `extern` block
|
||||
LL | type 一;
|
||||
LL | fn 二();
|
||||
| ^^
|
||||
|
|
||||
= note: This limitation may be lifted in the future; see issue #83942 <https://github.com/rust-lang/rust/issues/83942> for more information
|
||||
|
||||
error: items in `extern` blocks cannot use non-ascii identifiers
|
||||
--> $DIR/extern_block_nonascii_forbidden.rs:7:12
|
||||
|
|
||||
LL | extern "C" {
|
||||
| ---------- in this `extern` block
|
||||
...
|
||||
LL | static 三: usize;
|
||||
| ^^
|
||||
|
|
||||
= note: This limitation may be lifted in the future; see issue #83942 <https://github.com/rust-lang/rust/issues/83942> for more information
|
||||
|
||||
error: aborting due to 3 previous errors
|
||||
|
@ -6,7 +6,7 @@ LL | mod řųśť;
|
||||
|
|
||||
= help: to create the module `řųśť`, create file "$DIR/řųśť.rs"
|
||||
|
||||
error[E0754]: trying to load file for module `řųśť` with non ascii identifer name
|
||||
error[E0754]: trying to load file for module `řųśť` with non-ascii identifier name
|
||||
--> $DIR/mod_file_nonascii_forbidden.rs:3:5
|
||||
|
|
||||
LL | mod řųśť;
|
||||
|
Loading…
Reference in New Issue
Block a user