diff options
Diffstat (limited to 'lib/Frontend/PCHWriterDecl.cpp')
-rw-r--r-- | lib/Frontend/PCHWriterDecl.cpp | 12 |
1 files changed, 11 insertions, 1 deletions
diff --git a/lib/Frontend/PCHWriterDecl.cpp b/lib/Frontend/PCHWriterDecl.cpp index 0671710882..a704d6762d 100644 --- a/lib/Frontend/PCHWriterDecl.cpp +++ b/lib/Frontend/PCHWriterDecl.cpp @@ -136,7 +136,14 @@ void PCHDeclWriter::VisitNamedDecl(NamedDecl *D) { void PCHDeclWriter::VisitTypeDecl(TypeDecl *D) { VisitNamedDecl(D); - Writer.AddTypeRef(QualType(D->getTypeForDecl(), 0), Record); + if (isa<CXXRecordDecl>(D)) { + // FIXME: Hack. To read a templated CXXRecordDecl from PCH, we need an + // initialized CXXRecordDecl before creating an InjectedClassNameType. + // Delay emitting/reading CXXRecordDecl's TypeForDecl until when we handle + // CXXRecordDecl emitting/initialization. + Writer.AddTypeRef(QualType(), Record); + } else + Writer.AddTypeRef(QualType(D->getTypeForDecl(), 0), Record); } void PCHDeclWriter::VisitTypedefDecl(TypedefDecl *D) { @@ -591,6 +598,9 @@ void PCHDeclWriter::VisitCXXRecordDecl(CXXRecordDecl *D) { Record.push_back(CXXRecNotTemplate); } + // FIXME: Hack. See PCHDeclWriter::VisitTypeDecl. + Writer.AddTypeRef(QualType(D->getTypeForDecl(), 0), Record); + if (D->isDefinition()) { unsigned NumBases = D->getNumBases(); Record.push_back(NumBases); |