diff options
author | Argyrios Kyrtzidis <akyrtzi@gmail.com> | 2010-07-08 17:13:02 +0000 |
---|---|---|
committer | Argyrios Kyrtzidis <akyrtzi@gmail.com> | 2010-07-08 17:13:02 +0000 |
commit | 8871a44ae61cf97ff6fff4c640fadce9ba4cf1b0 (patch) | |
tree | f6c689432e33df638fb7678e0d09af33f23cf463 | |
parent | bfcc92c3476ada55ceeea49e43e6d2e083252830 (diff) |
Introduce PCHReader::GetTranslationUnitDecl() and use it instead of ReadDeclRecord when initializing.
ReadDeclRecord would hit assertion if the translation unit declaration was already loaded during
IdentifierInfo initialization.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@107885 91177308-0d34-0410-b5e6-96231b3b80d8
-rw-r--r-- | include/clang/Frontend/PCHReader.h | 3 | ||||
-rw-r--r-- | lib/Frontend/PCHReader.cpp | 9 |
2 files changed, 11 insertions, 1 deletions
diff --git a/include/clang/Frontend/PCHReader.h b/include/clang/Frontend/PCHReader.h index 9f91739106..3d29fccf8f 100644 --- a/include/clang/Frontend/PCHReader.h +++ b/include/clang/Frontend/PCHReader.h @@ -616,6 +616,9 @@ public: TypeSourceInfo *GetTypeSourceInfo(const RecordData &Record, unsigned &Idx); + /// \brief Resolve and return the translation unit declaration. + TranslationUnitDecl *GetTranslationUnitDecl(); + /// \brief Resolve a type ID into a type, potentially building a new /// type. QualType GetType(pch::TypeID ID); diff --git a/lib/Frontend/PCHReader.cpp b/lib/Frontend/PCHReader.cpp index 568d9ce77e..6acfdb29e4 100644 --- a/lib/Frontend/PCHReader.cpp +++ b/lib/Frontend/PCHReader.cpp @@ -1702,7 +1702,7 @@ void PCHReader::InitializeContext(ASTContext &Ctx) { PP->setExternalSource(this); // Load the translation unit declaration - ReadDeclRecord(DeclOffsets[0], 0); + GetTranslationUnitDecl(); // Load the special types. Context->setBuiltinVaListType( @@ -2590,6 +2590,13 @@ Decl *PCHReader::GetExternalDecl(uint32_t ID) { return GetDecl(ID); } +TranslationUnitDecl *PCHReader::GetTranslationUnitDecl() { + if (!DeclsLoaded[0]) + ReadDeclRecord(DeclOffsets[0], 0); + + return cast<TranslationUnitDecl>(DeclsLoaded[0]); +} + Decl *PCHReader::GetDecl(pch::DeclID ID) { if (ID == 0) return 0; |