]> granicus.if.org Git - clang/commitdiff
[modules] For explicit module file dependencies, only list direct dependency module...
authorRichard Smith <richard-llvm@metafoo.co.uk>
Thu, 13 Aug 2015 18:30:25 +0000 (18:30 +0000)
committerRichard Smith <richard-llvm@metafoo.co.uk>
Thu, 13 Aug 2015 18:30:25 +0000 (18:30 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@244931 91177308-0d34-0410-b5e6-96231b3b80d8

lib/Frontend/CompilerInvocation.cpp
lib/Frontend/DependencyFile.cpp
test/Modules/dependency-gen.modulemap

index ae1ccd75bdafc3f7887a5f0b6d3ca0c571abc4ca..73febb463ec2708f35c04d28d368f9e8122ca573 100644 (file)
@@ -709,6 +709,9 @@ static void ParseDependencyOutputArgs(DependencyOutputOptions &Opts,
   // They won't be discovered by the regular preprocessor, so
   // we let make / ninja to know about this implicit dependency.
   Opts.ExtraDeps = Args.getAllArgValues(OPT_fsanitize_blacklist);
+  auto ModuleFiles = Args.getAllArgValues(OPT_fmodule_file);
+  Opts.ExtraDeps.insert(Opts.ExtraDeps.end(), ModuleFiles.begin(),
+                        ModuleFiles.end());
 }
 
 bool clang::ParseDiagnosticArgs(DiagnosticOptions &Opts, ArgList &Args,
index ec47781887b62cdfd3321ab0e8c79e979efa8a30..c5c34490d71e95fb84ca5fc66cbae0456701a953 100644 (file)
@@ -486,6 +486,6 @@ bool DFGASTReaderListener::visitInputFile(llvm::StringRef Filename,
 
 void DFGASTReaderListener::visitModuleFile(llvm::StringRef Filename,
                                            serialization::ModuleKind Kind) {
-  if (Parent.includeModuleFiles() || Kind == serialization::MK_ExplicitModule)
+  if (Parent.includeModuleFiles())
     Parent.AddFilename(Filename);
 }
index c98a5ec60da9cd04eeb9f4202a5cb1489a05bfc4..00a3308569c5ceeed76d54ceacba357bb0784d91 100644 (file)
@@ -5,6 +5,8 @@
 //
 // RUN: %clang_cc1 -I. -x c++ -fmodule-name=test-base -fmodules -emit-module -fno-validate-pch -fmodules-strict-decluse Inputs/dependency-gen-base.modulemap -o %t/base.pcm -fmodule-map-file-home-is-cwd -fmodule-map-file=%S/Inputs/dependency-gen-base.modulemap
 // RUN: %clang_cc1 -I. -x c++ -fmodule-name=test -fmodules -emit-module -fno-validate-pch -fmodules-strict-decluse -fmodule-file=%t/base.pcm %s -dependency-file - -MT explicit.pcm -o %t/explicit.pcm -fmodules-cache-path=%t -fmodule-map-file-home-is-cwd | FileCheck %s --check-prefix=EXPLICIT
+//
+// RUN: %clang_cc1 -I. -x c++ -fmodules -include Inputs/dependency-gen.h -x c++ /dev/null -fmodule-file=%t/explicit.pcm -MT main.o -fsyntax-only -dependency-file - | FileCheck %s --check-prefix=EXPLICIT-USE
 module "test" {
   export *
   header "Inputs/dependency-gen.h"
@@ -34,3 +36,8 @@ module "test" {
 // EXPLICIT-NOT: dependency-gen-
 // EXPLICIT: {{ |\.[/\\]}}Inputs{{[/\\]}}dependency-gen.h
 // EXPLICIT-NOT: dependency-gen-
+
+// EXPLICIT-USE: main.o:
+// EXPLICIT-USE-NOT: base.pcm
+// EXPLICIT-USE: explicit.pcm
+// EXPLICIT-USE-NOT: base.pcm