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,
     }))
 }