[Lldb-commits] [lldb] r114512 - /lldb/trunk/source/Symbol/ClangASTContext.cpp

Greg Clayton gclayton at apple.com
Tue Sep 21 17:24:45 PDT 2010


Author: gclayton
Date: Tue Sep 21 19:24:45 2010
New Revision: 114512

URL: http://llvm.org/viewvc/llvm-project?rev=114512&view=rev
Log:
Fixed CXXRecordDecl declaration settings for whether a class in a POD type
or not.


Modified:
    lldb/trunk/source/Symbol/ClangASTContext.cpp

Modified: lldb/trunk/source/Symbol/ClangASTContext.cpp
URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/source/Symbol/ClangASTContext.cpp?rev=114512&r1=114511&r2=114512&view=diff
==============================================================================
--- lldb/trunk/source/Symbol/ClangASTContext.cpp (original)
+++ lldb/trunk/source/Symbol/ClangASTContext.cpp Tue Sep 21 19:24:45 2010
@@ -943,7 +943,13 @@
             if (field)
             {
                 record_decl->addDecl(field);
-                return true;
+                
+                if (cxx_record_decl->isPOD())
+                {
+                    if (!field->getType()->isPODType())
+                        cxx_record_decl->setPOD (false);
+                    return true;
+                }
             }
         }
         else
@@ -1095,7 +1101,7 @@
                 {
                     cxx_record_decl->setBases(base_classes, num_base_classes);
                     
-                    if (cxx_record_decl->isEmpty())
+                    if (cxx_record_decl->isEmpty() || cxx_record_decl->isPOD())
                     {
                         // set empty to false if any bases are virtual, or not empty.
                     
@@ -1107,16 +1113,22 @@
                             if (base_class->isVirtual())
                             {
                                 cxx_record_decl->setEmpty (false);
+                                cxx_record_decl->setPOD (false);
                                 break;
                             }
                             else
                             {
-                                 const CXXRecordDecl *base_class_decl = cast<CXXRecordDecl>(base_class->getType()->getAs<RecordType>()->getDecl());
-                                 if (!base_class_decl->isEmpty())
-                                 {
+                                QualType base_type (base_class->getType());
+                                
+                                if (!base_type->isPODType())
+                                    cxx_record_decl->setPOD (false);
+
+                                const CXXRecordDecl *base_class_decl = cast<CXXRecordDecl>(base_type->getAs<RecordType>()->getDecl());
+                                if (!base_class_decl->isEmpty())
+                                {
                                     cxx_record_decl->setEmpty (false);
                                     break;
-                                 }
+                                }
                             }
                         }
                     }





More information about the lldb-commits mailing list