Handle unrecognized type names in checking signature for mutable return type
diff --git a/syntax/check.rs b/syntax/check.rs
index 5d02fa8..b9c5370 100644
--- a/syntax/check.rs
+++ b/syntax/check.rs
@@ -521,7 +521,10 @@
         if receiver.mutable {
             return;
         }
-        let resolve = cx.types.resolve(&receiver.ty);
+        let resolve = match cx.types.try_resolve(&receiver.ty) {
+            Some(resolve) => resolve,
+            None => return,
+        };
         if !resolve.generics.lifetimes.is_empty() {
             return;
         }
@@ -536,9 +539,11 @@
         fn visit_type(&mut self, ty: &'t Type) {
             self.found |= match ty {
                 Type::Ref(ty) => ty.mutable,
-                Type::Ident(ident) => {
-                    let resolve = self.cx.types.resolve(ident);
-                    !resolve.generics.lifetimes.is_empty()
+                Type::Ident(ident) if Atom::from(&ident.rust).is_none() => {
+                    match self.cx.types.try_resolve(ident) {
+                        Some(resolve) => !resolve.generics.lifetimes.is_empty(),
+                        None => true,
+                    }
                 }
                 _ => false,
             };
diff --git a/syntax/resolve.rs b/syntax/resolve.rs
index 757b78f..3a2635b 100644
--- a/syntax/resolve.rs
+++ b/syntax/resolve.rs
@@ -11,11 +11,16 @@
 impl<'a> Types<'a> {
     pub fn resolve(&self, ident: &impl UnresolvedName) -> Resolution<'a> {
         let ident = ident.ident();
-        match self.resolutions.get(ident) {
-            Some(resolution) => *resolution,
+        match self.try_resolve(ident) {
+            Some(resolution) => resolution,
             None => panic!("Unable to resolve type `{}`", ident),
         }
     }
+
+    pub fn try_resolve(&self, ident: &impl UnresolvedName) -> Option<Resolution<'a>> {
+        let ident = ident.ident();
+        self.resolutions.get(ident).copied()
+    }
 }
 
 pub trait UnresolvedName {