Audit the code for places where it is assumed that every base specifier refers to a RecordType. Add assertions or conditions as appropriate. This fixes another crash in the Apache stdlib vector.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@85055 91177308-0d34-0410-b5e6-96231b3b80d8
diff --git a/lib/AST/DeclCXX.cpp b/lib/AST/DeclCXX.cpp
index 457f4c8..2e3bbce 100644
--- a/lib/AST/DeclCXX.cpp
+++ b/lib/AST/DeclCXX.cpp
@@ -364,34 +364,36 @@
       }
     }
   }
-  
+
   if (getNumBases() == 0 && getNumVBases() == 0)
     return;
-  
+
   llvm::SmallPtrSet<CanQualType, 8> ConversionFunctions;
   if (!inTopClass)
     collectConversionFunctions(ConversionFunctions);
-  
+
   for (CXXRecordDecl::base_class_iterator VBase = vbases_begin(),
        E = vbases_end(); VBase != E; ++VBase) {
-    CXXRecordDecl *VBaseClassDecl
-      = cast<CXXRecordDecl>(VBase->getType()->getAs<RecordType>()->getDecl());
-    VBaseClassDecl->getNestedVisibleConversionFunctions(RD,
-                  TopConversionsTypeSet,
-                  (inTopClass ? TopConversionsTypeSet : ConversionFunctions));
-      
+    if (const RecordType *RT = VBase->getType()->getAs<RecordType>()) {
+      CXXRecordDecl *VBaseClassDecl
+        = cast<CXXRecordDecl>(RT->getDecl());
+      VBaseClassDecl->getNestedVisibleConversionFunctions(RD,
+                    TopConversionsTypeSet,
+                    (inTopClass ? TopConversionsTypeSet : ConversionFunctions));
+    }
   }
   for (CXXRecordDecl::base_class_iterator Base = bases_begin(),
        E = bases_end(); Base != E; ++Base) {
     if (Base->isVirtual())
       continue;
-    CXXRecordDecl *BaseClassDecl
-      = cast<CXXRecordDecl>(Base->getType()->getAs<RecordType>()->getDecl());
-    
-    BaseClassDecl->getNestedVisibleConversionFunctions(RD,
-                  TopConversionsTypeSet,
-                  (inTopClass ? TopConversionsTypeSet : ConversionFunctions));
-    
+    if (const RecordType *RT = Base->getType()->getAs<RecordType>()) {
+      CXXRecordDecl *BaseClassDecl
+        = cast<CXXRecordDecl>(RT->getDecl());
+
+      BaseClassDecl->getNestedVisibleConversionFunctions(RD,
+                    TopConversionsTypeSet,
+                    (inTopClass ? TopConversionsTypeSet : ConversionFunctions));
+    }
   }
 }