Enforce that extern shared structs are declared unsafe
diff --git a/syntax/check.rs b/syntax/check.rs
index 5980f75..f823964 100644
--- a/syntax/check.rs
+++ b/syntax/check.rs
@@ -167,16 +167,22 @@
 }
 
 fn check_api_struct(cx: &mut Check, strct: &Struct) {
-    check_reserved_name(cx, &strct.ident);
+    let ident = &strct.ident;
+    check_reserved_name(cx, ident);
 
     if strct.fields.is_empty() {
         let span = span_for_struct_error(strct);
         cx.error(span, "structs without any fields are not supported");
     }
 
-    if cx.types.cxx.contains(&strct.ident) {
-        let span = span_for_struct_error(strct);
-        cx.error(span, "extern C++ structs are not implemented yet");
+    if cx.types.cxx.contains(ident) {
+        if let Some(ety) = cx.types.untrusted.get(ident) {
+            let msg = "extern shared struct must be declared in an `unsafe extern` block";
+            cx.error(ety, msg);
+        } else {
+            let span = span_for_struct_error(strct);
+            cx.error(span, "extern C++ structs are not implemented yet");
+        }
     }
 
     for field in &strct.fields {