Defer unsafety check for fn with ptr argument

That error does not need to be fatal at parse time, because the parser
still understands exactly what was written. We accumulate and emit it
alongside other type errors that might be present in the same function
signature.
diff --git a/syntax/check.rs b/syntax/check.rs
index 0009eb1..2c03bdf 100644
--- a/syntax/check.rs
+++ b/syntax/check.rs
@@ -425,6 +425,13 @@
                     "passing a function pointer from C++ to Rust is not implemented yet",
                 );
             }
+        } else if let Type::Ptr(_) = arg.ty {
+            if efn.sig.unsafety.is_none() {
+                cx.error(
+                    arg,
+                    "pointer argument requires that the function be marked unsafe",
+                );
+            }
         } else if is_unsized(cx, &arg.ty) {
             let desc = describe(cx, &arg.ty);
             let msg = format!("passing {} by value is not supported", desc);