diff options
author | Douglas Gregor <dgregor@apple.com> | 2012-01-30 06:01:29 +0000 |
---|---|---|
committer | Douglas Gregor <dgregor@apple.com> | 2012-01-30 06:01:29 +0000 |
commit | 899292827456532bc66219f9d778595c57614f77 (patch) | |
tree | fa9971f4bad44e176c13d13bc80d68f4dce77e25 /clang/lib/Lex | |
parent | 829400bb22fc72d291fd3e5057b0880d7b09aafa (diff) | |
download | bcm5719-llvm-899292827456532bc66219f9d778595c57614f77.tar.gz bcm5719-llvm-899292827456532bc66219f9d778595c57614f77.zip |
Thread a TargetInfo through to the module map; we'll need it for
target-specific module requirements.
llvm-svn: 149224
Diffstat (limited to 'clang/lib/Lex')
-rw-r--r-- | clang/lib/Lex/HeaderSearch.cpp | 9 | ||||
-rw-r--r-- | clang/lib/Lex/ModuleMap.cpp | 13 | ||||
-rw-r--r-- | clang/lib/Lex/Preprocessor.cpp | 4 |
3 files changed, 20 insertions, 6 deletions
diff --git a/clang/lib/Lex/HeaderSearch.cpp b/clang/lib/Lex/HeaderSearch.cpp index e56eb6c915c..e3a6c52ff4d 100644 --- a/clang/lib/Lex/HeaderSearch.cpp +++ b/clang/lib/Lex/HeaderSearch.cpp @@ -39,9 +39,10 @@ HeaderFileInfo::getControllingMacro(ExternalIdentifierLookup *External) { ExternalHeaderFileInfoSource::~ExternalHeaderFileInfoSource() {} HeaderSearch::HeaderSearch(FileManager &FM, DiagnosticsEngine &Diags, - const LangOptions &LangOpts) + const LangOptions &LangOpts, + const TargetInfo *Target) : FileMgr(FM), Diags(Diags), FrameworkMap(64), - ModMap(FileMgr, *Diags.getClient(), LangOpts) + ModMap(FileMgr, *Diags.getClient(), LangOpts, Target) { AngledDirIdx = 0; SystemDirIdx = 0; @@ -365,6 +366,10 @@ const FileEntry *DirectoryLookup::DoFrameworkLookup( return FE; } +void HeaderSearch::setTarget(const TargetInfo &Target) { + ModMap.setTarget(Target); +} + //===----------------------------------------------------------------------===// // Header File Location. diff --git a/clang/lib/Lex/ModuleMap.cpp b/clang/lib/Lex/ModuleMap.cpp index 708da945856..3583b034d53 100644 --- a/clang/lib/Lex/ModuleMap.cpp +++ b/clang/lib/Lex/ModuleMap.cpp @@ -70,8 +70,8 @@ ModuleMap::resolveExport(Module *Mod, } ModuleMap::ModuleMap(FileManager &FileMgr, const DiagnosticConsumer &DC, - const LangOptions &LangOpts) - : LangOpts(LangOpts) + const LangOptions &LangOpts, const TargetInfo *Target) + : LangOpts(LangOpts), Target(Target) { llvm::IntrusiveRefCntPtr<DiagnosticIDs> DiagIDs(new DiagnosticIDs); Diags = llvm::IntrusiveRefCntPtr<DiagnosticsEngine>( @@ -90,6 +90,12 @@ ModuleMap::~ModuleMap() { delete SourceMgr; } +void ModuleMap::setTarget(const TargetInfo &Target) { + assert((!this->Target || this->Target == &Target) && + "Improper target override"); + this->Target = &Target; +} + Module *ModuleMap::findModuleForHeader(const FileEntry *File) { llvm::DenseMap<const FileEntry *, Module *>::iterator Known = Headers.find(File); @@ -992,7 +998,7 @@ void ModuleMapParser::parseRequiresDecl() { consumeToken(); // Add this feature. - ActiveModule->addRequirement(Feature, Map.LangOpts); + ActiveModule->addRequirement(Feature, Map.LangOpts, *Map.Target); if (!Tok.is(MMToken::Comma)) break; @@ -1360,6 +1366,7 @@ bool ModuleMapParser::parseModuleMapFile() { } bool ModuleMap::parseModuleMapFile(const FileEntry *File) { + assert(Target != 0 && "Missing target information"); FileID ID = SourceMgr->createFileID(File, SourceLocation(), SrcMgr::C_User); const llvm::MemoryBuffer *Buffer = SourceMgr->getBuffer(ID); if (!Buffer) diff --git a/clang/lib/Lex/Preprocessor.cpp b/clang/lib/Lex/Preprocessor.cpp index 05cbffdfd12..fc6efb60689 100644 --- a/clang/lib/Lex/Preprocessor.cpp +++ b/clang/lib/Lex/Preprocessor.cpp @@ -167,7 +167,9 @@ void Preprocessor::Initialize(const TargetInfo &Target) { Ident__exception_info = Ident__exception_code = Ident__abnormal_termination = 0; Ident___exception_info = Ident___exception_code = Ident___abnormal_termination = 0; Ident_GetExceptionInfo = Ident_GetExceptionCode = Ident_AbnormalTermination = 0; - } + } + + HeaderInfo.setTarget(Target); } void Preprocessor::setPTHManager(PTHManager* pm) { |