diff options
| author | Greg Clayton <gclayton@apple.com> | 2010-09-22 00:24:45 +0000 |
|---|---|---|
| committer | Greg Clayton <gclayton@apple.com> | 2010-09-22 00:24:45 +0000 |
| commit | 60e1aa56f7bfcc0272f6b54f63587f504967f2a6 (patch) | |
| tree | 9e8283087f4afb65835df1297f52e1d02cb4bf17 /lldb/source | |
| parent | d7aa114ecce87731a42f4aaadf46d7c12d51bf6e (diff) | |
| download | bcm5719-llvm-60e1aa56f7bfcc0272f6b54f63587f504967f2a6.tar.gz bcm5719-llvm-60e1aa56f7bfcc0272f6b54f63587f504967f2a6.zip | |
Fixed CXXRecordDecl declaration settings for whether a class in a POD type
or not.
llvm-svn: 114512
Diffstat (limited to 'lldb/source')
| -rw-r--r-- | lldb/source/Symbol/ClangASTContext.cpp | 24 |
1 files changed, 18 insertions, 6 deletions
diff --git a/lldb/source/Symbol/ClangASTContext.cpp b/lldb/source/Symbol/ClangASTContext.cpp index a00c00efb58..6822c66443c 100644 --- a/lldb/source/Symbol/ClangASTContext.cpp +++ b/lldb/source/Symbol/ClangASTContext.cpp @@ -943,7 +943,13 @@ ClangASTContext::AddFieldToRecordType 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 @@ ClangASTContext::SetBaseClassesForClassType (void *class_clang_type, CXXBaseSpec { 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 @@ ClangASTContext::SetBaseClassesForClassType (void *class_clang_type, CXXBaseSpec 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; - } + } } } } |

