Reject unsafe on an extern Rust block
error: extern "Rust" block does not need to be unsafe
--> lib.rs:116:5
|
116 | unsafe extern "Rust" {
| ^^^^^^^^^^^^^^^^^^^^
diff --git a/syntax/parse.rs b/syntax/parse.rs
index c23ee8f..32a6ddf 100644
--- a/syntax/parse.rs
+++ b/syntax/parse.rs
@@ -171,11 +171,23 @@
}
fn parse_foreign_mod(cx: &mut Errors, foreign_mod: ItemForeignMod, out: &mut Vec<Api>) {
- let lang = match parse_lang(foreign_mod.abi) {
+ let lang = match parse_lang(&foreign_mod.abi) {
Ok(lang) => lang,
Err(err) => return cx.push(err),
};
+ match lang {
+ Lang::Rust => {
+ if foreign_mod.unsafety.is_some() {
+ let unsafety = foreign_mod.unsafety;
+ let abi = foreign_mod.abi;
+ let span = quote!(#unsafety #abi);
+ cx.error(span, "extern \"Rust\" block does not need to be unsafe");
+ }
+ }
+ Lang::Cxx => {}
+ }
+
let mut items = Vec::new();
for foreign in &foreign_mod.items {
match foreign {
@@ -222,7 +234,7 @@
out.extend(items);
}
-fn parse_lang(abi: Abi) -> Result<Lang> {
+fn parse_lang(abi: &Abi) -> Result<Lang> {
let name = match &abi.name {
Some(name) => name,
None => {