]> granicus.if.org Git - clang/commitdiff
[Modules] Make sure that the synthesized file "__inferred_module.map" doesn't show...
authorArgyrios Kyrtzidis <akyrtzi@gmail.com>
Fri, 14 Mar 2014 02:26:31 +0000 (02:26 +0000)
committerArgyrios Kyrtzidis <akyrtzi@gmail.com>
Fri, 14 Mar 2014 02:26:31 +0000 (02:26 +0000)
Follow-up for rdar://15459210

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@203882 91177308-0d34-0410-b5e6-96231b3b80d8

include/clang/Serialization/ASTReader.h
lib/Frontend/DependencyFile.cpp
lib/Serialization/ASTReader.cpp
test/Modules/dependency-gen-inferred-map.m [new file with mode: 0644]

index 92b2172f51dd10d8307038adc4d0764c739ee6f2..d636795a3975c333cc95e37c65da92ed54163286 100644 (file)
@@ -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
index e27381bf7794a50f19138d9b8d2d295c1b27b795..8457770abb9f0df465a8f2f8dab4ed20e00f6bd7 100644 (file)
@@ -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;
 }
index 595edfc4c5b84ad5a4e41aaf54db15f15acb1670..cc425c5695a99852c476e6938779048052cce0a8 100644 (file)
@@ -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/test/Modules/dependency-gen-inferred-map.m b/test/Modules/dependency-gen-inferred-map.m
new file mode 100644 (file)
index 0000000..11cc872
--- /dev/null
@@ -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;