diff options
author | Argyrios Kyrtzidis <akyrtzi@gmail.com> | 2014-03-14 02:26:31 +0000 |
---|---|---|
committer | Argyrios Kyrtzidis <akyrtzi@gmail.com> | 2014-03-14 02:26:31 +0000 |
commit | 68ccbe01b0fdb6b2ce3893d851ce225cd869cf0b (patch) | |
tree | 3e34e29bcda5fa5b6735c84bcff7a6abe9273625 | |
parent | ce9b49e5ecc357019fdc41bc666d2ab7caf75f21 (diff) | |
download | bcm5719-llvm-68ccbe01b0fdb6b2ce3893d851ce225cd869cf0b.tar.gz bcm5719-llvm-68ccbe01b0fdb6b2ce3893d851ce225cd869cf0b.zip |
[Modules] Make sure that the synthesized file "__inferred_module.map" doesn't show up as dependency of a module file.
Follow-up for rdar://15459210
llvm-svn: 203882
-rw-r--r-- | clang/include/clang/Serialization/ASTReader.h | 8 | ||||
-rw-r--r-- | clang/lib/Frontend/DependencyFile.cpp | 8 | ||||
-rw-r--r-- | clang/lib/Serialization/ASTReader.cpp | 17 | ||||
-rw-r--r-- | clang/test/Modules/dependency-gen-inferred-map.m | 8 |
4 files changed, 31 insertions, 10 deletions
diff --git a/clang/include/clang/Serialization/ASTReader.h b/clang/include/clang/Serialization/ASTReader.h index 92b2172f51d..d636795a397 100644 --- a/clang/include/clang/Serialization/ASTReader.h +++ b/clang/include/clang/Serialization/ASTReader.h @@ -183,7 +183,10 @@ public: /// system input files as well. /// /// \returns true to continue receiving the next input file, false to stop. - virtual bool visitInputFile(StringRef Filename, bool isSystem) { return true;} + virtual bool visitInputFile(StringRef Filename, bool isSystem, + bool isOverridden) { + return true; + } }; /// \brief Simple wrapper class for chaining listeners. @@ -214,7 +217,8 @@ public: void ReadCounter(const serialization::ModuleFile &M, unsigned Value) override; bool needsInputFileVisitation() override; bool needsSystemInputFileVisitation() override; - bool visitInputFile(StringRef Filename, bool isSystem) override; + bool visitInputFile(StringRef Filename, bool isSystem, + bool isOverridden) override; }; /// \brief ASTReaderListener implementation to validate the information of diff --git a/clang/lib/Frontend/DependencyFile.cpp b/clang/lib/Frontend/DependencyFile.cpp index e27381bf779..8457770abb9 100644 --- a/clang/lib/Frontend/DependencyFile.cpp +++ b/clang/lib/Frontend/DependencyFile.cpp @@ -79,7 +79,8 @@ public: bool needsSystemInputFileVisitation() override { return Parent.includeSystemHeaders(); } - bool visitInputFile(StringRef Filename, bool isSystem) override; + bool visitInputFile(StringRef Filename, bool isSystem, + bool isOverridden) override; }; } @@ -258,8 +259,11 @@ void DFGImpl::OutputDependencyFile() { } bool DFGASTReaderListener::visitInputFile(llvm::StringRef Filename, - bool IsSystem) { + bool IsSystem, bool IsOverridden) { assert(!IsSystem || needsSystemInputFileVisitation()); + if (IsOverridden) + return true; + Parent.AddFilename(Filename); return true; } diff --git a/clang/lib/Serialization/ASTReader.cpp b/clang/lib/Serialization/ASTReader.cpp index 595edfc4c5b..cc425c5695a 100644 --- a/clang/lib/Serialization/ASTReader.cpp +++ b/clang/lib/Serialization/ASTReader.cpp @@ -119,9 +119,10 @@ bool ChainedASTReaderListener::needsSystemInputFileVisitation() { Second->needsSystemInputFileVisitation(); } bool ChainedASTReaderListener::visitInputFile(StringRef Filename, - bool isSystem) { - return First->visitInputFile(Filename, isSystem) || - Second->visitInputFile(Filename, isSystem); + bool isSystem, + bool isOverridden) { + return First->visitInputFile(Filename, isSystem, isOverridden) || + Second->visitInputFile(Filename, isSystem, isOverridden); } //===----------------------------------------------------------------------===// @@ -2120,8 +2121,11 @@ ASTReader::ReadControlBlock(ModuleFile &F, if (Listener && Listener->needsInputFileVisitation()) { unsigned N = Listener->needsSystemInputFileVisitation() ? NumInputs : NumUserInputs; - for (unsigned I = 0; I < N; ++I) - Listener->visitInputFile(getInputFileName(F, I+1), I >= NumUserInputs); + for (unsigned I = 0; I < N; ++I) { + bool IsSystem = I >= NumUserInputs; + InputFileInfo FI = readInputFileInfo(F, I+1); + Listener->visitInputFile(FI.Filename, IsSystem, FI.Overridden); + } } return Success; @@ -3932,7 +3936,8 @@ bool ASTReader::readASTFileControlBlock(StringRef Filename, bool shouldContinue = false; switch ((InputFileRecordTypes)Cursor.readRecord(Code, Record, &Blob)) { case INPUT_FILE: - shouldContinue = Listener.visitInputFile(Blob, isSystemFile); + bool Overridden = static_cast<bool>(Record[3]); + shouldContinue = Listener.visitInputFile(Blob, isSystemFile, Overridden); break; } if (!shouldContinue) diff --git a/clang/test/Modules/dependency-gen-inferred-map.m b/clang/test/Modules/dependency-gen-inferred-map.m new file mode 100644 index 00000000000..11cc8728811 --- /dev/null +++ b/clang/test/Modules/dependency-gen-inferred-map.m @@ -0,0 +1,8 @@ +// Test that the virtual file "__inferred_module.map" doesn't show up as dependency. + +// RUN: rm -rf %t-mcp +// RUN: %clang_cc1 -isysroot %S/Inputs/System -triple x86_64-apple-darwin10 -dependency-file %t.d -MT %s.o -F %S/Inputs -fsyntax-only -fmodules -fmodules-cache-path=%t-mcp %s +// RUN: FileCheck %s < %t.d +// CHECK-NOT: __inferred_module + +@import Module; |