From: Sebastian Redl Date: Thu, 31 Mar 2011 19:29:24 +0000 (+0000) Subject: Make ChainedIncludesSource an ExternalSemaSource, otherwise initialization of the... X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=ce0682ff4647b885d41847b0f97918504282c2e8;p=clang Make ChainedIncludesSource an ExternalSemaSource, otherwise initialization of the ASTReader is incomplete, leading to errors like not realizing std::type_info is already defined. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@128664 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/include/clang/Serialization/ChainedIncludesSource.h b/include/clang/Serialization/ChainedIncludesSource.h index 90e74d913c..ceef4f2e34 100644 --- a/include/clang/Serialization/ChainedIncludesSource.h +++ b/include/clang/Serialization/ChainedIncludesSource.h @@ -14,23 +14,23 @@ #ifndef LLVM_CLANG_SERIALIZATION_CHAINEDINCLUDESSOURCE_H #define LLVM_CLANG_SERIALIZATION_CHAINEDINCLUDESSOURCE_H -#include "clang/AST/ExternalASTSource.h" +#include "clang/Sema/ExternalSemaSource.h" #include namespace clang { class CompilerInstance; -class ChainedIncludesSource : public ExternalASTSource { +class ChainedIncludesSource : public ExternalSemaSource { public: virtual ~ChainedIncludesSource(); static ChainedIncludesSource *create(CompilerInstance &CI); private: - ExternalASTSource &getFinalReader() const { return *FinalReader; } + ExternalSemaSource &getFinalReader() const { return *FinalReader; } std::vector CIs; - llvm::OwningPtr FinalReader; + llvm::OwningPtr FinalReader; protected: @@ -56,6 +56,16 @@ protected: virtual void FinishedDeserializing(); virtual void StartTranslationUnit(ASTConsumer *Consumer); virtual void PrintStats(); + +//===----------------------------------------------------------------------===// +// ExternalSemaSource interface. +//===----------------------------------------------------------------------===// + + virtual void InitializeSema(Sema &S); + virtual void ForgetSema(); + virtual std::pair ReadMethodPool(Selector Sel); + virtual bool LookupUnqualified(LookupResult &R, Scope *S); + }; } diff --git a/lib/Sema/SemaExprCXX.cpp b/lib/Sema/SemaExprCXX.cpp index 36079c2ce7..8c81acc9d1 100644 --- a/lib/Sema/SemaExprCXX.cpp +++ b/lib/Sema/SemaExprCXX.cpp @@ -343,7 +343,7 @@ ExprResult Sema::ActOnCXXTypeid(SourceLocation OpLoc, SourceLocation LParenLoc, bool isType, void *TyOrExpr, SourceLocation RParenLoc) { // Find the std::type_info type. - if (!StdNamespace) + if (!getStdNamespace()) return ExprError(Diag(OpLoc, diag::err_need_header_before_typeid)); if (!CXXTypeInfoDecl) { diff --git a/lib/Serialization/ChainedIncludesSource.cpp b/lib/Serialization/ChainedIncludesSource.cpp index aba1eae3d3..4b954191fc 100644 --- a/lib/Serialization/ChainedIncludesSource.cpp +++ b/lib/Serialization/ChainedIncludesSource.cpp @@ -208,3 +208,18 @@ void ChainedIncludesSource::StartTranslationUnit(ASTConsumer *Consumer) { void ChainedIncludesSource::PrintStats() { return getFinalReader().PrintStats(); } + +void ChainedIncludesSource::InitializeSema(Sema &S) { + return getFinalReader().InitializeSema(S); +} +void ChainedIncludesSource::ForgetSema() { + return getFinalReader().ForgetSema(); +} +std::pair +ChainedIncludesSource::ReadMethodPool(Selector Sel) { + return getFinalReader().ReadMethodPool(Sel); +} +bool ChainedIncludesSource::LookupUnqualified(LookupResult &R, Scope *S) { + return getFinalReader().LookupUnqualified(R, S); +} +