summaryrefslogtreecommitdiffstats
path: root/clang/lib/Frontend/PCHWriter.cpp
diff options
context:
space:
mode:
authorDouglas Gregor <dgregor@apple.com>2009-04-13 21:20:57 +0000
committerDouglas Gregor <dgregor@apple.com>2009-04-13 21:20:57 +0000
commit183671e2d260930a8c43abc177f80f68cab041c0 (patch)
tree1e7ba3d7fad59387ee4d8072d8131c554a04e7e0 /clang/lib/Frontend/PCHWriter.cpp
parent4184ac847f91dc7a8644ad6c5a3e389923117eb3 (diff)
downloadbcm5719-llvm-183671e2d260930a8c43abc177f80f68cab041c0.tar.gz
bcm5719-llvm-183671e2d260930a8c43abc177f80f68cab041c0.zip
PCH support for record decls/types and their fields. Now that we can
handle the definition of __builtin_va_list on x86-64, eliminate the forced -triple in PCH tests to get better coverage. llvm-svn: 68988
Diffstat (limited to 'clang/lib/Frontend/PCHWriter.cpp')
-rw-r--r--clang/lib/Frontend/PCHWriter.cpp19
1 files changed, 19 insertions, 0 deletions
diff --git a/clang/lib/Frontend/PCHWriter.cpp b/clang/lib/Frontend/PCHWriter.cpp
index 2ba8e9eeb61..6758a506998 100644
--- a/clang/lib/Frontend/PCHWriter.cpp
+++ b/clang/lib/Frontend/PCHWriter.cpp
@@ -254,8 +254,10 @@ namespace {
void VisitTypedefDecl(TypedefDecl *D);
void VisitTagDecl(TagDecl *D);
void VisitEnumDecl(EnumDecl *D);
+ void VisitRecordDecl(RecordDecl *D);
void VisitValueDecl(ValueDecl *D);
void VisitEnumConstantDecl(EnumConstantDecl *D);
+ void VisitFieldDecl(FieldDecl *D);
void VisitVarDecl(VarDecl *D);
void VisitDeclContext(DeclContext *DC, uint64_t LexicalOffset,
uint64_t VisibleOffset);
@@ -306,6 +308,13 @@ void PCHDeclWriter::VisitEnumDecl(EnumDecl *D) {
Code = pch::DECL_ENUM;
}
+void PCHDeclWriter::VisitRecordDecl(RecordDecl *D) {
+ VisitTagDecl(D);
+ Record.push_back(D->hasFlexibleArrayMember());
+ Record.push_back(D->isAnonymousStructOrUnion());
+ Code = pch::DECL_RECORD;
+}
+
void PCHDeclWriter::VisitValueDecl(ValueDecl *D) {
VisitNamedDecl(D);
Writer.AddTypeRef(D->getType(), Record);
@@ -318,6 +327,13 @@ void PCHDeclWriter::VisitEnumConstantDecl(EnumConstantDecl *D) {
Code = pch::DECL_ENUM_CONSTANT;
}
+void PCHDeclWriter::VisitFieldDecl(FieldDecl *D) {
+ VisitValueDecl(D);
+ Record.push_back(D->isMutable());
+ // FIXME: Writer.AddExprRef(D->getBitWidth());
+ Code = pch::DECL_FIELD;
+}
+
void PCHDeclWriter::VisitVarDecl(VarDecl *D) {
VisitValueDecl(D);
Record.push_back(D->getStorageClass());
@@ -798,6 +814,9 @@ uint64_t PCHWriter::WriteDeclContextVisibleBlock(ASTContext &Context,
uint64_t Offset = S.GetCurrentBitNo();
RecordData Record;
StoredDeclsMap *Map = static_cast<StoredDeclsMap*>(DC->getLookupPtr());
+ if (!Map)
+ return 0;
+
for (StoredDeclsMap::iterator D = Map->begin(), DEnd = Map->end();
D != DEnd; ++D) {
AddDeclarationName(D->first, Record);
OpenPOWER on IntegriCloud