// Return previously demangled name if available.
     if (isRealized()  ||  isFuture()) {
-        if (!isAnySwift()) {
+        // Swift metaclasses don't have the is-Swift bit.
+        // We can't take this shortcut for them.
+        if (!isMetaClass() && !isAnySwift()) {
             return data()->ro()->name;
         }
         auto rwe = data()->ext();
 
     testassert(list2[count] == NULL);
     free(list2);
     free(objc_copyClassList(NULL));
+    
+    // Make sure metaclasses get demangled too.
+    testassert(strcmp(class_getName([TestRoot class]), class_getName(object_getClass([TestRoot class]))) == 0);
+    testassert(strcmp(class_getName([Sub class]), class_getName(object_getClass([Sub class]))) == 0);
+    testassert(strcmp(class_getName([SwiftV1Class class]), class_getName(object_getClass([SwiftV1Class class]))) == 0);
+    testassert(strcmp(class_getName([SwiftV1Class2 class]), class_getName(object_getClass([SwiftV1Class2 class]))) == 0);
+    testassert(strcmp(class_getName([SwiftV1Class3 class]), class_getName(object_getClass([SwiftV1Class3 class]))) == 0);
+    testassert(strcmp(class_getName([SwiftV1Class4 class]), class_getName(object_getClass([SwiftV1Class4 class]))) == 0);
 
     succeed(__FILE__);
 }