Keep track of whether extern type layout can be trusted
diff --git a/syntax/parse.rs b/syntax/parse.rs
index 32a6ddf..7520644 100644
--- a/syntax/parse.rs
+++ b/syntax/parse.rs
@@ -176,9 +176,10 @@
Err(err) => return cx.push(err),
};
+ let trusted = foreign_mod.unsafety.is_some();
match lang {
Lang::Rust => {
- if foreign_mod.unsafety.is_some() {
+ if trusted {
let unsafety = foreign_mod.unsafety;
let abi = foreign_mod.abi;
let span = quote!(#unsafety #abi);
@@ -191,7 +192,7 @@
let mut items = Vec::new();
for foreign in &foreign_mod.items {
match foreign {
- ForeignItem::Type(foreign) => match parse_extern_type(cx, foreign, lang) {
+ ForeignItem::Type(foreign) => match parse_extern_type(cx, foreign, lang, trusted) {
Ok(ety) => items.push(ety),
Err(err) => cx.push(err),
},
@@ -251,7 +252,12 @@
}
}
-fn parse_extern_type(cx: &mut Errors, foreign_type: &ForeignItemType, lang: Lang) -> Result<Api> {
+fn parse_extern_type(
+ cx: &mut Errors,
+ foreign_type: &ForeignItemType,
+ lang: Lang,
+ trusted: bool,
+) -> Result<Api> {
let doc = attrs::parse_doc(cx, &foreign_type.attrs);
let type_token = foreign_type.type_token;
let ident = foreign_type.ident.clone();
@@ -265,6 +271,7 @@
type_token,
ident,
semi_token,
+ trusted,
}))
}