diff options
author | Argyrios Kyrtzidis <akyrtzi@gmail.com> | 2010-07-02 11:55:20 +0000 |
---|---|---|
committer | Argyrios Kyrtzidis <akyrtzi@gmail.com> | 2010-07-02 11:55:20 +0000 |
commit | 43921b53b582145f0d1b7c48223bd4d9f0a9d1be (patch) | |
tree | 818d3a1d8a39185a35d95eea9884ff6e8e5668f3 | |
parent | 240437bbb96898e2cd019ffbc5303cd42e3d4f5f (diff) |
Allow reading of InjectedClassNameType from PCH even when its decl is currently initializing.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@107473 91177308-0d34-0410-b5e6-96231b3b80d8
-rw-r--r-- | include/clang/AST/Type.h | 3 | ||||
-rw-r--r-- | lib/Frontend/PCHReader.cpp | 5 |
2 files changed, 7 insertions, 1 deletions
diff --git a/include/clang/AST/Type.h b/include/clang/AST/Type.h index e540f945b1..b9cac64171 100644 --- a/include/clang/AST/Type.h +++ b/include/clang/AST/Type.h @@ -2544,6 +2544,9 @@ class InjectedClassNameType : public Type { friend class ASTContext; // ASTContext creates these. friend class TagDecl; // TagDecl mutilates the Decl + friend class PCHReader; // FIXME: ASTContext::getInjectedClassNameType is not + // currently suitable for PCH reading, too much + // interdependencies. InjectedClassNameType(CXXRecordDecl *D, QualType TST) : Type(InjectedClassName, QualType(), true), Decl(D), InjectedType(TST) { diff --git a/lib/Frontend/PCHReader.cpp b/lib/Frontend/PCHReader.cpp index ecd95057cb..5941ec0a25 100644 --- a/lib/Frontend/PCHReader.cpp +++ b/lib/Frontend/PCHReader.cpp @@ -2197,7 +2197,10 @@ QualType PCHReader::ReadTypeRecord(uint64_t Offset) { case pch::TYPE_INJECTED_CLASS_NAME: { CXXRecordDecl *D = cast<CXXRecordDecl>(GetDecl(Record[0])); QualType TST = GetType(Record[1]); // probably derivable - return Context->getInjectedClassNameType(D, TST); + // FIXME: ASTContext::getInjectedClassNameType is not currently suitable + // for PCH reading, too much interdependencies. + return + QualType(new (*Context, TypeAlignment) InjectedClassNameType(D, TST), 0); } case pch::TYPE_TEMPLATE_TYPE_PARM: { |