<div dir="ltr"><div class="gmail_extra"><div class="gmail_quote">On Thu, Mar 13, 2014 at 8:07 PM, Argyrios Kyrtzidis <span dir="ltr"><<a href="mailto:akyrtzi@gmail.com" target="_blank">akyrtzi@gmail.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Author: akirtzidis<br>
Date: Thu Mar 13 22:07:38 2014<br>
New Revision: 203885<br>
<br>
URL: <a href="http://llvm.org/viewvc/llvm-project?rev=203885&view=rev" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project?rev=203885&view=rev</a><br>
Log:<br>
[Modules] Emit the module file paths as dependencies of the PCH when we are building one.<br>
<br>
This is because the PCH is tied to the module files, if one of the module files changes or gets removed<br>
the build system should re-build the PCH file.<br></blockquote><div><br></div><div><div>Is there any reason this has its own -cc1 flag instead of being tied to -emit-pch?</div></div><div> </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
rdar://16321245<br>
<br>
Added:<br>
    cfe/trunk/test/Driver/pch-deps.c<br>
    cfe/trunk/test/Modules/dependency-gen-pch.m<br>
Modified:<br>
    cfe/trunk/include/clang/Driver/CC1Options.td<br>
    cfe/trunk/include/clang/Frontend/DependencyOutputOptions.h<br>
    cfe/trunk/include/clang/Serialization/ASTReader.h<br>
    cfe/trunk/lib/Driver/Tools.cpp<br>
    cfe/trunk/lib/Frontend/CompilerInvocation.cpp<br>
    cfe/trunk/lib/Frontend/DependencyFile.cpp<br>
    cfe/trunk/lib/Serialization/ASTReader.cpp<br>
<br>
Modified: cfe/trunk/include/clang/Driver/CC1Options.td<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/Driver/CC1Options.td?rev=203885&r1=203884&r2=203885&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/Driver/CC1Options.td?rev=203885&r1=203884&r2=203885&view=diff</a><br>
==============================================================================<br>
--- cfe/trunk/include/clang/Driver/CC1Options.td (original)<br>
+++ cfe/trunk/include/clang/Driver/CC1Options.td Thu Mar 13 22:07:38 2014<br>
@@ -223,6 +223,8 @@ def dependent_lib : Joined<["--"], "depe<br>
<br>
 def sys_header_deps : Flag<["-"], "sys-header-deps">,<br>
   HelpText<"Include system headers in dependency output">;<br>
+def module_file_deps : Flag<["-"], "module-file-deps">,<br>
+  HelpText<"Include module files in dependency output">;<br>
 def header_include_file : Separate<["-"], "header-include-file">,<br>
   HelpText<"Filename (or -) to write header include output to">;<br>
 def show_includes : Flag<["--"], "show-includes">,<br>
<br>
Modified: cfe/trunk/include/clang/Frontend/DependencyOutputOptions.h<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/Frontend/DependencyOutputOptions.h?rev=203885&r1=203884&r2=203885&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/Frontend/DependencyOutputOptions.h?rev=203885&r1=203884&r2=203885&view=diff</a><br>
==============================================================================<br>
--- cfe/trunk/include/clang/Frontend/DependencyOutputOptions.h (original)<br>
+++ cfe/trunk/include/clang/Frontend/DependencyOutputOptions.h Thu Mar 13 22:07:38 2014<br>
@@ -26,6 +26,7 @@ public:<br>
                                      /// problems.<br>
   unsigned AddMissingHeaderDeps : 1; ///< Add missing headers to dependency list<br>
   unsigned PrintShowIncludes : 1; ///< Print cl.exe style /showIncludes info.<br>
+  unsigned IncludeModuleFiles : 1; ///< Include module file dependencies.<br>
<br>
   /// The file to write dependency output to.<br>
   std::string OutputFile;<br>
@@ -50,6 +51,7 @@ public:<br>
     UsePhonyTargets = 0;<br>
     AddMissingHeaderDeps = 0;<br>
     PrintShowIncludes = 0;<br>
+    IncludeModuleFiles = 0;<br>
   }<br>
 };<br>
<br>
<br>
Modified: cfe/trunk/include/clang/Serialization/ASTReader.h<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/Serialization/ASTReader.h?rev=203885&r1=203884&r2=203885&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/Serialization/ASTReader.h?rev=203885&r1=203884&r2=203885&view=diff</a><br>
==============================================================================<br>
--- cfe/trunk/include/clang/Serialization/ASTReader.h (original)<br>
+++ cfe/trunk/include/clang/Serialization/ASTReader.h Thu Mar 13 22:07:38 2014<br>
@@ -171,6 +171,9 @@ public:<br>
   virtual void ReadCounter(const serialization::ModuleFile &M,<br>
                            unsigned Value) {}<br>
<br>
+  /// This is called for each AST file loaded.<br>
+  virtual void visitModuleFile(StringRef Filename) {}<br>
+<br>
   /// \brief Returns true if this \c ASTReaderListener wants to receive the<br>
   /// input files of the AST file via \c visitInputFile, false otherwise.<br>
   virtual bool needsInputFileVisitation() { return false; }<br>
@@ -217,6 +220,7 @@ public:<br>
   void ReadCounter(const serialization::ModuleFile &M, unsigned Value) override;<br>
   bool needsInputFileVisitation() override;<br>
   bool needsSystemInputFileVisitation() override;<br>
+  void visitModuleFile(StringRef Filename) override;<br>
   bool visitInputFile(StringRef Filename, bool isSystem,<br>
                       bool isOverridden) override;<br>
 };<br>
<br>
Modified: cfe/trunk/lib/Driver/Tools.cpp<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Driver/Tools.cpp?rev=203885&r1=203884&r2=203885&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Driver/Tools.cpp?rev=203885&r1=203884&r2=203885&view=diff</a><br>
==============================================================================<br>
--- cfe/trunk/lib/Driver/Tools.cpp (original)<br>
+++ cfe/trunk/lib/Driver/Tools.cpp Thu Mar 13 22:07:38 2014<br>
@@ -295,6 +295,9 @@ void Clang::AddPreprocessingOptions(Comp<br>
     if (A->getOption().matches(options::OPT_M) ||<br>
         A->getOption().matches(options::OPT_MD))<br>
       CmdArgs.push_back("-sys-header-deps");<br>
+<br>
+    if (isa<PrecompileJobAction>(JA))<br>
+      CmdArgs.push_back("-module-file-deps");<br>
   }<br>
<br>
   if (Args.hasArg(options::OPT_MG)) {<br>
<br>
Modified: cfe/trunk/lib/Frontend/CompilerInvocation.cpp<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Frontend/CompilerInvocation.cpp?rev=203885&r1=203884&r2=203885&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Frontend/CompilerInvocation.cpp?rev=203885&r1=203884&r2=203885&view=diff</a><br>
==============================================================================<br>
--- cfe/trunk/lib/Frontend/CompilerInvocation.cpp (original)<br>
+++ cfe/trunk/lib/Frontend/CompilerInvocation.cpp Thu Mar 13 22:07:38 2014<br>
@@ -528,6 +528,7 @@ static void ParseDependencyOutputArgs(De<br>
   Opts.OutputFile = Args.getLastArgValue(OPT_dependency_file);<br>
   Opts.Targets = Args.getAllArgValues(OPT_MT);<br>
   Opts.IncludeSystemHeaders = Args.hasArg(OPT_sys_header_deps);<br>
+  Opts.IncludeModuleFiles = Args.hasArg(OPT_module_file_deps);<br>
   Opts.UsePhonyTargets = Args.hasArg(OPT_MP);<br>
   Opts.ShowHeaderIncludes = Args.hasArg(OPT_H);<br>
   Opts.HeaderIncludeOutputFile = Args.getLastArgValue(OPT_header_include_file);<br>
<br>
Modified: cfe/trunk/lib/Frontend/DependencyFile.cpp<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Frontend/DependencyFile.cpp?rev=203885&r1=203884&r2=203885&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Frontend/DependencyFile.cpp?rev=203885&r1=203884&r2=203885&view=diff</a><br>
==============================================================================<br>
--- cfe/trunk/lib/Frontend/DependencyFile.cpp (original)<br>
+++ cfe/trunk/lib/Frontend/DependencyFile.cpp Thu Mar 13 22:07:38 2014<br>
@@ -40,6 +40,7 @@ class DFGImpl : public PPCallbacks {<br>
   bool PhonyTarget;<br>
   bool AddMissingHeaderDeps;<br>
   bool SeenMissingHeader;<br>
+  bool IncludeModuleFiles;<br>
 private:<br>
   bool FileMatchesDepCriteria(const char *Filename,<br>
                               SrcMgr::CharacteristicKind FileType);<br>
@@ -51,7 +52,8 @@ public:<br>
       IncludeSystemHeaders(Opts.IncludeSystemHeaders),<br>
       PhonyTarget(Opts.UsePhonyTargets),<br>
       AddMissingHeaderDeps(Opts.AddMissingHeaderDeps),<br>
-      SeenMissingHeader(false) {}<br>
+      SeenMissingHeader(false),<br>
+      IncludeModuleFiles(Opts.IncludeModuleFiles) {}<br>
<br>
   void FileChanged(SourceLocation Loc, FileChangeReason Reason,<br>
                    SrcMgr::CharacteristicKind FileType,<br>
@@ -68,6 +70,7 @@ public:<br>
<br>
   void AddFilename(StringRef Filename);<br>
   bool includeSystemHeaders() const { return IncludeSystemHeaders; }<br>
+  bool includeModuleFiles() const { return IncludeModuleFiles; }<br>
 };<br>
<br>
 class DFGASTReaderListener : public ASTReaderListener {<br>
@@ -79,6 +82,7 @@ public:<br>
   bool needsSystemInputFileVisitation() override {<br>
     return Parent.includeSystemHeaders();<br>
   }<br>
+  void visitModuleFile(StringRef Filename) override;<br>
   bool visitInputFile(StringRef Filename, bool isSystem,<br>
                       bool isOverridden) override;<br>
 };<br>
@@ -268,3 +272,7 @@ bool DFGASTReaderListener::visitInputFil<br>
   return true;<br>
 }<br>
<br>
+void DFGASTReaderListener::visitModuleFile(llvm::StringRef Filename) {<br>
+  if (Parent.includeModuleFiles())<br>
+    Parent.AddFilename(Filename);<br>
+}<br>
<br>
Modified: cfe/trunk/lib/Serialization/ASTReader.cpp<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Serialization/ASTReader.cpp?rev=203885&r1=203884&r2=203885&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Serialization/ASTReader.cpp?rev=203885&r1=203884&r2=203885&view=diff</a><br>
==============================================================================<br>
--- cfe/trunk/lib/Serialization/ASTReader.cpp (original)<br>
+++ cfe/trunk/lib/Serialization/ASTReader.cpp Thu Mar 13 22:07:38 2014<br>
@@ -118,6 +118,10 @@ bool ChainedASTReaderListener::needsSyst<br>
   return First->needsSystemInputFileVisitation() ||<br>
   Second->needsSystemInputFileVisitation();<br>
 }<br>
+void ChainedASTReaderListener::visitModuleFile(StringRef Filename) {<br>
+  First->visitModuleFile(Filename);<br>
+  Second->visitModuleFile(Filename);<br>
+}<br>
 bool ChainedASTReaderListener::visitInputFile(StringRef Filename,<br>
                                               bool isSystem,<br>
                                               bool isOverridden) {<br>
@@ -2118,6 +2122,9 @@ ASTReader::ReadControlBlock(ModuleFile &<br>
         }<br>
       }<br>
<br>
+      if (Listener)<br>
+        Listener->visitModuleFile(F.FileName);<br>
+<br>
       if (Listener && Listener->needsInputFileVisitation()) {<br>
         unsigned N = Listener->needsSystemInputFileVisitation() ? NumInputs<br>
                                                                 : NumUserInputs;<br>
<br>
Added: cfe/trunk/test/Driver/pch-deps.c<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Driver/pch-deps.c?rev=203885&view=auto" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Driver/pch-deps.c?rev=203885&view=auto</a><br>
==============================================================================<br>
--- cfe/trunk/test/Driver/pch-deps.c (added)<br>
+++ cfe/trunk/test/Driver/pch-deps.c Thu Mar 13 22:07:38 2014<br>
@@ -0,0 +1,10 @@<br>
+// RUN: %clang -x c-header %s -o %t.pch -MMD -MT dependencies -MF %t.d -### 2> %t<br>
+// RUN: FileCheck %s -input-file=%t<br>
+// CHECK: -emit-pch<br>
+// CHECK: -dependency-file<br>
+// CHECK: -module-file-deps<br>
+<br>
+// RUN: %clang -c %s -o %t -MMD -MT dependencies -MF %t.d -### 2> %t<br>
+// RUN: FileCheck %s -check-prefix=CHECK-NOPCH -input-file=%t<br>
+// CHECK-NOPCH: -dependency-file<br>
+// CHECK-NOPCH-NOT: -module-file-deps<br>
<br>
Added: cfe/trunk/test/Modules/dependency-gen-pch.m<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Modules/dependency-gen-pch.m?rev=203885&view=auto" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Modules/dependency-gen-pch.m?rev=203885&view=auto</a><br>
==============================================================================<br>
--- cfe/trunk/test/Modules/dependency-gen-pch.m (added)<br>
+++ cfe/trunk/test/Modules/dependency-gen-pch.m Thu Mar 13 22:07:38 2014<br>
@@ -0,0 +1,12 @@<br>
+// RUN: rm -rf %t-mcp<br>
+// RUN: mkdir -p %t-mcp<br>
+<br>
+// RUN: %clang_cc1 -isysroot %S/Inputs/System -triple x86_64-apple-darwin10 -module-file-deps -dependency-file %t.d -MT %s.o -I %S/Inputs -fmodules -fmodules-cache-path=%t-mcp -emit-pch -o %t.pch %s<br>
+// RUN: FileCheck %s < %t.d<br>
+// CHECK: dependency-gen-pch.m.o<br>
+// CHECK-NEXT: dependency-gen-pch.m<br>
+// CHECK-NEXT: diamond_top.pcm<br>
+// CHECK-NEXT: Inputs{{.}}diamond_top.h<br>
+// CHECK-NEXT: Inputs{{.}}module.map<br>
+<br>
+#import "diamond_top.h"<br>
<br>
<br>
_______________________________________________<br>
cfe-commits mailing list<br>
<a href="mailto:cfe-commits@cs.uiuc.edu">cfe-commits@cs.uiuc.edu</a><br>
<a href="http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits" rel="noreferrer" target="_blank">http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits</a><br>
</blockquote></div><br></div></div>