diff options
author | Douglas Gregor <dgregor@apple.com> | 2009-04-13 21:20:57 +0000 |
---|---|---|
committer | Douglas Gregor <dgregor@apple.com> | 2009-04-13 21:20:57 +0000 |
commit | 183671e2d260930a8c43abc177f80f68cab041c0 (patch) | |
tree | 1e7ba3d7fad59387ee4d8072d8131c554a04e7e0 /clang/lib/Frontend/PCHWriter.cpp | |
parent | 4184ac847f91dc7a8644ad6c5a3e389923117eb3 (diff) | |
download | bcm5719-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.cpp | 19 |
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); |