summaryrefslogtreecommitdiffstats
path: root/lldb/source
diff options
context:
space:
mode:
authorGreg Clayton <gclayton@apple.com>2010-09-22 00:24:45 +0000
committerGreg Clayton <gclayton@apple.com>2010-09-22 00:24:45 +0000
commit60e1aa56f7bfcc0272f6b54f63587f504967f2a6 (patch)
tree9e8283087f4afb65835df1297f52e1d02cb4bf17 /lldb/source
parentd7aa114ecce87731a42f4aaadf46d7c12d51bf6e (diff)
downloadbcm5719-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.cpp24
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;
- }
+ }
}
}
}
OpenPOWER on IntegriCloud