diff options
Diffstat (limited to 'clang/lib/Frontend')
-rw-r--r-- | clang/lib/Frontend/PCHReader.cpp | 11 | ||||
-rw-r--r-- | clang/lib/Frontend/PCHWriter.cpp | 1 |
2 files changed, 12 insertions, 0 deletions
diff --git a/clang/lib/Frontend/PCHReader.cpp b/clang/lib/Frontend/PCHReader.cpp index bc0e7208d31..47a7e6264ad 100644 --- a/clang/lib/Frontend/PCHReader.cpp +++ b/clang/lib/Frontend/PCHReader.cpp @@ -1536,6 +1536,17 @@ void PCHReader::InitializeContext(ASTContext &Ctx) { if (unsigned FastEnum = SpecialTypes[pch::SPECIAL_TYPE_OBJC_FAST_ENUMERATION_STATE]) Context->setObjCFastEnumerationStateType(GetType(FastEnum)); + if (unsigned File = SpecialTypes[pch::SPECIAL_TYPE_FILE]) { + QualType FileType = GetType(File); + assert(!FileType.isNull() && "FILE type is NULL"); + if (const TypedefType *Typedef = FileType->getAsTypedefType()) + Context->setFILEDecl(Typedef->getDecl()); + else { + const TagType *Tag = FileType->getAsTagType(); + assert(Tag && "Invalid FILE type in PCH file"); + Context->setFILEDecl(Tag->getDecl()); + } + } } /// \brief Retrieve the name of the original source file name diff --git a/clang/lib/Frontend/PCHWriter.cpp b/clang/lib/Frontend/PCHWriter.cpp index 566df350f61..0362e8a4903 100644 --- a/clang/lib/Frontend/PCHWriter.cpp +++ b/clang/lib/Frontend/PCHWriter.cpp @@ -1892,6 +1892,7 @@ void PCHWriter::WritePCH(Sema &SemaRef, MemorizeStatCalls *StatCalls, AddTypeRef(Context.getObjCClassType(), Record); AddTypeRef(Context.getRawCFConstantStringType(), Record); AddTypeRef(Context.getRawObjCFastEnumerationStateType(), Record); + AddTypeRef(Context.getFILEType(), Record); Stream.EmitRecord(pch::SPECIAL_TYPES, Record); // Write the record containing external, unnamed definitions. |