Fixed an issue with the clang type creation code for C++ classes where we wouldn't set a CXXRecordDecl to be NOT empty if we had base classes that were not empty or had virtual functions.

git-svn-id: https://llvm.org/svn/llvm-project/llvdb/trunk@114484 91177308-0d34-0410-b5e6-96231b3b80d8
diff --git a/source/Symbol/ClangASTContext.cpp b/source/Symbol/ClangASTContext.cpp
index a9e1c37..a00c00e 100644
--- a/source/Symbol/ClangASTContext.cpp
+++ b/source/Symbol/ClangASTContext.cpp
@@ -1093,8 +1093,33 @@
                 CXXRecordDecl *cxx_record_decl = dyn_cast<CXXRecordDecl>(record_type->getDecl());
                 if (cxx_record_decl)
                 {
-                    //cxx_record_decl->setEmpty (false);
                     cxx_record_decl->setBases(base_classes, num_base_classes);
+                    
+                    if (cxx_record_decl->isEmpty())
+                    {
+                        // set empty to false if any bases are virtual, or not empty.
+                    
+                        CXXRecordDecl::base_class_const_iterator base_class, base_class_end;
+                        for (base_class = cxx_record_decl->bases_begin(), base_class_end = cxx_record_decl->bases_end();
+                             base_class != base_class_end;
+                             ++base_class)
+                        {
+                            if (base_class->isVirtual())
+                            {
+                                cxx_record_decl->setEmpty (false);
+                                break;
+                            }
+                            else
+                            {
+                                 const CXXRecordDecl *base_class_decl = cast<CXXRecordDecl>(base_class->getType()->getAs<RecordType>()->getDecl());
+                                 if (!base_class_decl->isEmpty())
+                                 {
+                                    cxx_record_decl->setEmpty (false);
+                                    break;
+                                 }
+                            }
+                        }
+                    }
                     return true;
                 }
             }