Index: clang/include/clang/Tooling/DependencyScanning/DependencyScanningTool.h =================================================================== --- clang/include/clang/Tooling/DependencyScanning/DependencyScanningTool.h +++ clang/include/clang/Tooling/DependencyScanning/DependencyScanningTool.h @@ -45,8 +45,8 @@ /// determined that the differences are benign for this compilation. std::vector ClangModuleDeps; - /// The original command line of the TU (excluding the compiler executable). - std::vector OriginalCommandLine; + /// Compiler invocation that can be used to build this TU (without paths). + CompilerInvocation BuildInvocation; /// Get the full command line. /// @@ -109,6 +109,8 @@ FullDependencyConsumer(const llvm::StringSet<> &AlreadySeen) : AlreadySeen(AlreadySeen) {} + void handleInvocation(const CompilerInvocation &CI) override; + void handleDependencyOutputOpts(const DependencyOutputOptions &) override {} void handleFileDependency(StringRef File) override { @@ -127,16 +129,15 @@ ContextHash = std::move(Hash); } - FullDependenciesResult getFullDependencies( - const std::vector &OriginalCommandLine) const; + FullDependenciesResult takeFullDependencies(); private: + CompilerInvocation BuildInvocation; std::vector Dependencies; std::vector PrebuiltModuleDeps; llvm::MapVector> ClangModuleDeps; std::string ContextHash; - std::vector OutputPaths; const llvm::StringSet<> &AlreadySeen; }; Index: clang/include/clang/Tooling/DependencyScanning/DependencyScanningWorker.h =================================================================== --- clang/include/clang/Tooling/DependencyScanning/DependencyScanningWorker.h +++ clang/include/clang/Tooling/DependencyScanning/DependencyScanningWorker.h @@ -32,6 +32,9 @@ public: virtual ~DependencyConsumer() {} + virtual void handleInvocation(const CompilerInvocation &CI) = 0; + + /// Dependency options may differ from what is seen in \c handleInvocation. virtual void handleDependencyOutputOpts(const DependencyOutputOptions &Opts) = 0; @@ -86,6 +89,14 @@ bool OptimizeArgs; }; +/// Disable implicit modules and canonicalize options that are only used by +/// implicit modules. +void clearImplicitModuleBuildOptions(CompilerInvocation &CI); + +/// Serialize the given invocation to -cc1 arguments, not including \c argv[0]. +std::vector +serializeCompilerInvocation(const CompilerInvocation &CI); + } // end namespace dependencies } // end namespace tooling } // end namespace clang Index: clang/lib/Tooling/DependencyScanning/DependencyScanningTool.cpp =================================================================== --- clang/lib/Tooling/DependencyScanning/DependencyScanningTool.cpp +++ clang/lib/Tooling/DependencyScanning/DependencyScanningTool.cpp @@ -16,28 +16,17 @@ std::vector FullDependencies::getCommandLine( llvm::function_ref LookupModuleOutput) const { - std::vector Args = OriginalCommandLine; + CompilerInvocation CI(BuildInvocation); + FrontendOptions &FrontendOpts = CI.getFrontendOpts(); - Args.push_back("-fno-implicit-modules"); - Args.push_back("-fno-implicit-module-maps"); for (const PrebuiltModuleDep &PMD : PrebuiltModuleDeps) - Args.push_back("-fmodule-file=" + PMD.PCMFile); + FrontendOpts.ModuleFiles.push_back(PMD.PCMFile); + for (ModuleID MID : ClangModuleDeps) - Args.push_back("-fmodule-file=" + - LookupModuleOutput(MID, ModuleOutputKind::ModuleFile)); - - // These arguments are unused in explicit compiles. - llvm::erase_if(Args, [](StringRef Arg) { - if (Arg.consume_front("-fmodules-")) { - return Arg.startswith("cache-path=") || - Arg.startswith("prune-interval=") || - Arg.startswith("prune-after=") || - Arg == "validate-once-per-build-session"; - } - return Arg.startswith("-fbuild-session-file="); - }); + FrontendOpts.ModuleFiles.push_back( + LookupModuleOutput(MID, ModuleOutputKind::ModuleFile)); - return Args; + return serializeCompilerInvocation(CI); } DependencyScanningTool::DependencyScanningTool( @@ -51,6 +40,8 @@ /// Prints out all of the gathered dependencies into a string. class MakeDependencyPrinterConsumer : public DependencyConsumer { public: + void handleInvocation(const CompilerInvocation &CI) override {} + void handleDependencyOutputOpts(const DependencyOutputOptions &Opts) override { this->Opts = std::make_unique(Opts); @@ -119,18 +110,22 @@ Worker.computeDependencies(CWD, CommandLine, Consumer, ModuleName); if (Result) return std::move(Result); - return Consumer.getFullDependencies(CommandLine); + return Consumer.takeFullDependencies(); } -FullDependenciesResult FullDependencyConsumer::getFullDependencies( - const std::vector &OriginalCommandLine) const { - FullDependencies FD; +void FullDependencyConsumer::handleInvocation(const CompilerInvocation &CI) { + BuildInvocation = CI; + clearImplicitModuleBuildOptions(BuildInvocation); +} - FD.OriginalCommandLine = ArrayRef(OriginalCommandLine).slice(1); +FullDependenciesResult FullDependencyConsumer::takeFullDependencies() { + FullDependenciesResult FDR; + FullDependencies &FD = FDR.FullDeps; + FD.BuildInvocation = std::move(BuildInvocation); FD.ID.ContextHash = std::move(ContextHash); - - FD.FileDeps.assign(Dependencies.begin(), Dependencies.end()); + FD.FileDeps = std::move(Dependencies); + FD.PrebuiltModuleDeps = std::move(PrebuiltModuleDeps); for (auto &&M : ClangModuleDeps) { auto &MD = M.second; @@ -138,10 +133,6 @@ FD.ClangModuleDeps.push_back(MD.ID); } - FD.PrebuiltModuleDeps = std::move(PrebuiltModuleDeps); - - FullDependenciesResult FDR; - for (auto &&M : ClangModuleDeps) { // TODO: Avoid handleModuleDependency even being called for modules // we've already seen. @@ -150,6 +141,5 @@ FDR.DiscoveredModules.push_back(std::move(M.second)); } - FDR.FullDeps = std::move(FD); return FDR; } Index: clang/lib/Tooling/DependencyScanning/DependencyScanningWorker.cpp =================================================================== --- clang/lib/Tooling/DependencyScanning/DependencyScanningWorker.cpp +++ clang/lib/Tooling/DependencyScanning/DependencyScanningWorker.cpp @@ -155,6 +155,8 @@ // Restore the value of DisableFree, which may be modified by Tooling. OriginalInvocation.getFrontendOpts().DisableFree = DisableFree; + Consumer.handleInvocation(OriginalInvocation); + // Create a compiler instance to handle the actual work. CompilerInstance ScanInstance(std::move(PCHContainerOps)); ScanInstance.setInvocation(std::move(Invocation)); @@ -356,3 +358,32 @@ return Invocation.run(); }); } + +void clang::tooling::dependencies::clearImplicitModuleBuildOptions( + CompilerInvocation &CI) { + CI.getLangOpts()->ImplicitModules = false; + CI.getHeaderSearchOpts().ImplicitModuleMaps = false; + CI.getHeaderSearchOpts().ModuleCachePath.clear(); + CI.getHeaderSearchOpts().ModulesValidateOncePerBuildSession = false; + CI.getHeaderSearchOpts().BuildSessionTimestamp = 0; + // The specific values we canonicalize to for pruning don't affect behaviour, + /// so use the default values so they will be dropped from the command-line. + CI.getHeaderSearchOpts().ModuleCachePruneInterval = 7 * 24 * 60 * 60; + CI.getHeaderSearchOpts().ModuleCachePruneAfter = 31 * 24 * 60 * 60; +} + +std::vector +clang::tooling::dependencies::serializeCompilerInvocation( + const CompilerInvocation &CI) { + // Set up string allocator. + llvm::BumpPtrAllocator Alloc; + llvm::StringSaver Strings(Alloc); + auto SA = [&Strings](const Twine &Arg) { return Strings.save(Arg).data(); }; + + // Synthesize full command line from the CompilerInvocation, including "-cc1". + SmallVector Args{"-cc1"}; + CI.generateCC1CommandLine(Args, SA); + + // Convert arguments to the return type. + return std::vector{Args.begin(), Args.end()}; +} \ No newline at end of file Index: clang/lib/Tooling/DependencyScanning/ModuleDepCollector.cpp =================================================================== --- clang/lib/Tooling/DependencyScanning/ModuleDepCollector.cpp +++ clang/lib/Tooling/DependencyScanning/ModuleDepCollector.cpp @@ -66,17 +66,7 @@ CI.getLangOpts()->ModuleName = Deps.ID.ModuleName; CI.getFrontendOpts().IsSystemModule = Deps.IsSystem; - // Disable implicit modules and canonicalize options that are only used by - // implicit modules. - CI.getLangOpts()->ImplicitModules = false; - CI.getHeaderSearchOpts().ImplicitModuleMaps = false; - CI.getHeaderSearchOpts().ModuleCachePath.clear(); - CI.getHeaderSearchOpts().ModulesValidateOncePerBuildSession = false; - CI.getHeaderSearchOpts().BuildSessionTimestamp = 0; - // The specific values we canonicalize to for pruning don't affect behaviour, - /// so use the default values so they will be dropped from the command-line. - CI.getHeaderSearchOpts().ModuleCachePruneInterval = 7 * 24 * 60 * 60; - CI.getHeaderSearchOpts().ModuleCachePruneAfter = 31 * 24 * 60 * 60; + clearImplicitModuleBuildOptions(CI); // Remove any macro definitions that are explicitly ignored. if (!CI.getHeaderSearchOpts().ModulesIgnoreMacros.empty()) { @@ -110,21 +100,6 @@ return CI; } -static std::vector -serializeCompilerInvocation(const CompilerInvocation &CI) { - // Set up string allocator. - llvm::BumpPtrAllocator Alloc; - llvm::StringSaver Strings(Alloc); - auto SA = [&Strings](const Twine &Arg) { return Strings.save(Arg).data(); }; - - // Synthesize full command line from the CompilerInvocation, including "-cc1". - SmallVector Args{"-cc1"}; - CI.generateCC1CommandLine(Args, SA); - - // Convert arguments to the return type. - return std::vector{Args.begin(), Args.end()}; -} - static std::vector splitString(std::string S, char Separator) { SmallVector Segments; StringRef(S).split(Segments, Separator, /*MaxSplit=*/-1, /*KeepEmpty=*/false); @@ -288,8 +263,6 @@ handleTopLevelModule(M); } - MDC.Consumer.handleDependencyOutputOpts(*MDC.Opts); - for (auto &&I : MDC.ModularDeps) MDC.Consumer.handleModuleDependency(*I.second); Index: clang/test/ClangScanDeps/diagnostics.c =================================================================== --- clang/test/ClangScanDeps/diagnostics.c +++ clang/test/ClangScanDeps/diagnostics.c @@ -36,8 +36,8 @@ // CHECK-NEXT: } // CHECK-NEXT: ], // CHECK-NEXT: "command-line": [ -// CHECK: "-fno-implicit-modules" -// CHECK: "-fno-implicit-module-maps" +// CHECK-NOT: "-fimplicit-modules" +// CHECK-NOT: "-fimplicit-module-maps" // CHECK: ], // CHECK-NEXT: "file-deps": [ // CHECK-NEXT: "[[PREFIX]]/tu.c" Index: clang/test/ClangScanDeps/modules-context-hash-ignore-macros.c =================================================================== --- clang/test/ClangScanDeps/modules-context-hash-ignore-macros.c +++ clang/test/ClangScanDeps/modules-context-hash-ignore-macros.c @@ -38,6 +38,7 @@ // CHECK-NEXT: ] // CHECK-NEXT: "command-line": [ // CHECK-NOT: "-DFOO" +// CHECK-NOT: "FOO" // CHECK: ] // CHECK: "input-file": "{{.*}}tu1.c" // CHECK-NEXT: } @@ -49,7 +50,8 @@ // CHECK-NEXT: } // CHECK-NEXT: ] // CHECK-NEXT: "command-line": [ -// CHECK: "-DFOO" +// CHECK: "-D" +// CHECK-NEXT: "FOO" // CHECK: ] // CHECK: "input-file": "{{.*}}tu2.c" // CHECK-NEXT: } @@ -61,8 +63,9 @@ // CHECK-NEXT: } // CHECK-NEXT: ] // CHECK-NEXT: "command-line": [ -// CHECK: "-DFOO" // CHECK: "-fmodules-ignore-macro=FOO" +// CHECK: "-D" +// CHECK-NEXT: "FOO" // CHECK: ] // CHECK: "input-file": "{{.*}}tu3.c" Index: clang/test/ClangScanDeps/modules-context-hash-outputs.c =================================================================== --- clang/test/ClangScanDeps/modules-context-hash-outputs.c +++ clang/test/ClangScanDeps/modules-context-hash-outputs.c @@ -35,7 +35,7 @@ // CHECK-NEXT: } // CHECK-NEXT: ] // CHECK-NEXT: "command-line": [ -// CHECK: "-MF" +// CHECK: "-dependency-file" // CHECK: ] // CHECK: "input-file": "{{.*}}tu1.c" // CHECK-NEXT: } @@ -48,6 +48,7 @@ // CHECK-NEXT: ] // CHECK-NEXT: "command-line": [ // CHECK-NOT: "-MF" +// CHECK-NOT: "-dependency-file" // CHECK: ] // CHECK: "input-file": "{{.*}}tu2.c" Index: clang/test/ClangScanDeps/modules-fmodule-name-no-module-built.m =================================================================== --- clang/test/ClangScanDeps/modules-fmodule-name-no-module-built.m +++ clang/test/ClangScanDeps/modules-fmodule-name-no-module-built.m @@ -41,10 +41,10 @@ // CHECK-NEXT: } // CHECK-NEXT: ], // CHECK-NEXT: "command-line": [ -// CHECK: "-fno-implicit-modules" -// CHECK-NEXT: "-fno-implicit-module-maps" -// CHECK-NEXT: "-fmodule-file=[[PREFIX]]/module-cache{{(_clangcl)?}}/[[HASH_H2]]/header2-{{[A-Z0-9]+}}.pcm" -// CHECK-NEXT: ], +// CHECK-NOT: "-fimplicit-modules" +// CHECK-NOT: "-fimplicit-module-maps" +// CHECK: "-fmodule-file=[[PREFIX]]/module-cache{{(_clangcl)?}}/[[HASH_H2]]/header2-{{[A-Z0-9]+}}.pcm" +// CHECK: ], // CHECK-NEXT: "file-deps": [ // CHECK-NEXT: "[[PREFIX]]/modules-fmodule-name-no-module-built.m" // CHECK-NEXT: "[[PREFIX]]/Inputs/header3.h" Index: clang/test/ClangScanDeps/modules-full.cpp =================================================================== --- clang/test/ClangScanDeps/modules-full.cpp +++ clang/test/ClangScanDeps/modules-full.cpp @@ -96,11 +96,11 @@ // CHECK-NEXT: } // CHECK-NEXT: ], // CHECK-NEXT: "command-line": [ -// CHECK: "-fno-implicit-modules" -// CHECK-NEXT: "-fno-implicit-module-maps" -// CHECK-ABS-NEXT: "-fmodule-file=[[PREFIX]]/module-cache{{(_clangcl)?}}/[[HASH_H1]]/header1-{{[A-Z0-9]+}}.pcm" -// CHECK-CUSTOM-NEXT: "-fmodule-file=[[PREFIX]]/custom/[[HASH_H1]]/header1-{{[A-Z0-9]+}}.pcm" -// CHECK-NEXT: ], +// CHECK-NOT: "-fimplicit-modules" +// CHECK-NOT: "-fimplicit-module-maps" +// CHECK-ABS: "-fmodule-file=[[PREFIX]]/module-cache{{(_clangcl)?}}/[[HASH_H1]]/header1-{{[A-Z0-9]+}}.pcm" +// CHECK-CUSTOM: "-fmodule-file=[[PREFIX]]/custom/[[HASH_H1]]/header1-{{[A-Z0-9]+}}.pcm" +// CHECK: ], // CHECK-NEXT: "file-deps": [ // CHECK-NEXT: "[[PREFIX]]/modules_cdb_input.cpp" // CHECK-NEXT: ], @@ -115,11 +115,11 @@ // CHECK-NEXT: } // CHECK-NEXT: ], // CHECK-NEXT: "command-line": [ -// CHECK: "-fno-implicit-modules" -// CHECK-NEXT: "-fno-implicit-module-maps" -// CHECK-ABS-NEXT: "-fmodule-file=[[PREFIX]]/module-cache{{(_clangcl)?}}/[[HASH_H1]]/header1-{{[A-Z0-9]+}}.pcm" -// CHECK-CUSTOM-NEXT: "-fmodule-file=[[PREFIX]]/custom/[[HASH_H1]]/header1-{{[A-Z0-9]+}}.pcm" -// CHECK-NEXT: ], +// CHECK-NOT: "-fimplicit-modules" +// CHECK-NOT: "-fimplicit-module-maps" +// CHECK-ABS: "-fmodule-file=[[PREFIX]]/module-cache{{(_clangcl)?}}/[[HASH_H1]]/header1-{{[A-Z0-9]+}}.pcm" +// CHECK-CUSTOM: "-fmodule-file=[[PREFIX]]/custom/[[HASH_H1]]/header1-{{[A-Z0-9]+}}.pcm" +// CHECK: ], // CHECK-NEXT: "file-deps": [ // CHECK-NEXT: "[[PREFIX]]/modules_cdb_input.cpp" // CHECK-NEXT: ], @@ -134,11 +134,11 @@ // CHECK-NEXT: } // CHECK-NEXT: ], // CHECK-NEXT: "command-line": [ -// CHECK: "-fno-implicit-modules" -// CHECK-NEXT: "-fno-implicit-module-maps" -// CHECK-ABS-NEXT: "-fmodule-file=[[PREFIX]]/module-cache{{(_clangcl)?}}/[[HASH_H1]]/header1-{{[A-Z0-9]+}}.pcm" -// CHECK-CUSTOM-NEXT: "-fmodule-file=[[PREFIX]]/custom/[[HASH_H1]]/header1-{{[A-Z0-9]+}}.pcm" -// CHECK-NEXT: ], +// CHECK-NOT: "-fimplicit-modules" +// CHECK-NOT: "-fimplicit-module-maps" +// CHECK-ABS: "-fmodule-file=[[PREFIX]]/module-cache{{(_clangcl)?}}/[[HASH_H1]]/header1-{{[A-Z0-9]+}}.pcm" +// CHECK-CUSTOM: "-fmodule-file=[[PREFIX]]/custom/[[HASH_H1]]/header1-{{[A-Z0-9]+}}.pcm" +// CHECK: ], // CHECK-NEXT: "file-deps": [ // CHECK-NEXT: "[[PREFIX]]/modules_cdb_input.cpp" // CHECK-NEXT: ], @@ -153,11 +153,11 @@ // CHECK-NEXT: } // CHECK-NEXT: ], // CHECK-NEXT: "command-line": [ -// CHECK: "-fno-implicit-modules" -// CHECK-NEXT: "-fno-implicit-module-maps" -// CHECK-ABS-NEXT: "-fmodule-file=[[PREFIX]]/module-cache{{(_clangcl)?}}/[[HASH_H1_DINCLUDE]]/header1-{{[A-Z0-9]+}}.pcm" -// CHECK-CUSTOM-NEXT: "-fmodule-file=[[PREFIX]]/custom/[[HASH_H1_DINCLUDE]]/header1-{{[A-Z0-9]+}}.pcm" -// CHECK-NEXT: ], +// CHECK-NOT: "-fimplicit-modules" +// CHECK-NOT: "-fimplicit-module-maps" +// CHECK-ABS: "-fmodule-file=[[PREFIX]]/module-cache{{(_clangcl)?}}/[[HASH_H1_DINCLUDE]]/header1-{{[A-Z0-9]+}}.pcm" +// CHECK-CUSTOM: "-fmodule-file=[[PREFIX]]/custom/[[HASH_H1_DINCLUDE]]/header1-{{[A-Z0-9]+}}.pcm" +// CHECK: ], // CHECK-NEXT: "file-deps": [ // CHECK-NEXT: "[[PREFIX]]/modules_cdb_input2.cpp" // CHECK-NEXT: ], Index: clang/test/ClangScanDeps/modules-inferred.m =================================================================== --- clang/test/ClangScanDeps/modules-inferred.m +++ clang/test/ClangScanDeps/modules-inferred.m @@ -44,10 +44,10 @@ // CHECK-NEXT: } // CHECK-NEXT: ], // CHECK-NEXT: "command-line": [ -// CHECK: "-fno-implicit-modules", -// CHECK-NEXT: "-fno-implicit-module-maps", -// CHECK-NEXT: "-fmodule-file=[[PREFIX]]/module-cache/[[HASH_INFERRED]]/Inferred-{{[A-Z0-9]+}}.pcm" -// CHECK-NEXT: ], +// CHECK-NOT: "-fimplicit-modules", +// CHECK-NOT: "-fimplicit-module-maps", +// CHECK: "-fmodule-file=[[PREFIX]]/module-cache/[[HASH_INFERRED]]/Inferred-{{[A-Z0-9]+}}.pcm" +// CHECK: ], // CHECK-NEXT: "file-deps": [ // CHECK-NEXT: "[[PREFIX]]/modules_cdb_input.cpp" // CHECK-NEXT: ], Index: clang/test/ClangScanDeps/modules-pch-common-submodule.c =================================================================== --- clang/test/ClangScanDeps/modules-pch-common-submodule.c +++ clang/test/ClangScanDeps/modules-pch-common-submodule.c @@ -49,10 +49,10 @@ // CHECK-PCH-NEXT: } // CHECK-PCH-NEXT: ], // CHECK-PCH-NEXT: "command-line": [ -// CHECK-PCH: "-fno-implicit-modules" -// CHECK-PCH-NEXT: "-fno-implicit-module-maps" -// CHECK-PCH-NEXT: "-fmodule-file=[[PREFIX]]/build/[[HASH_MOD_COMMON]]/ModCommon-{{.*}}.pcm" -// CHECK-PCH-NEXT: ], +// CHECK-PCH-NOT: "-fimplicit-modules" +// CHECK-PCH-NOT: "-fimplicit-module-maps" +// CHECK-PCH: "-fmodule-file=[[PREFIX]]/build/[[HASH_MOD_COMMON]]/ModCommon-{{.*}}.pcm" +// CHECK-PCH: ], // CHECK-PCH-NEXT: "file-deps": [ // CHECK-PCH-NEXT: "[[PREFIX]]/pch.h" // CHECK-PCH-NEXT: ], @@ -107,10 +107,10 @@ // CHECK-TU-NEXT: } // CHECK-TU-NEXT: ], // CHECK-TU-NEXT: "command-line": [ -// CHECK-TU: "-fno-implicit-modules", -// CHECK-TU-NEXT: "-fno-implicit-module-maps", -// CHECK-TU-NEXT: "-fmodule-file=[[PREFIX]]/build/[[HASH_MOD_TU:.*]]/ModTU-{{.*}}.pcm" -// CHECK-TU-NEXT: ], +// CHECK-TU-NOT: "-fimplicit-modules", +// CHECK-TU-NOT: "-fimplicit-module-maps", +// CHECK-TU: "-fmodule-file=[[PREFIX]]/build/[[HASH_MOD_TU:.*]]/ModTU-{{.*}}.pcm" +// CHECK-TU: ], // CHECK-TU-NEXT: "file-deps": [ // CHECK-TU-NEXT: "[[PREFIX]]/tu.c", // CHECK-TU-NEXT: "[[PREFIX]]/pch.h.gch" Index: clang/test/ClangScanDeps/modules-pch-common-via-submodule.c =================================================================== --- clang/test/ClangScanDeps/modules-pch-common-via-submodule.c +++ clang/test/ClangScanDeps/modules-pch-common-via-submodule.c @@ -46,10 +46,10 @@ // CHECK-PCH-NEXT: } // CHECK-PCH-NEXT: ], // CHECK-PCH-NEXT: "command-line": [ -// CHECK-PCH: "-fno-implicit-modules" -// CHECK-PCH-NEXT: "-fno-implicit-module-maps" -// CHECK-PCH-NEXT: "-fmodule-file=[[PREFIX]]/build/[[HASH_MOD_COMMON]]/ModCommon-{{.*}}.pcm" -// CHECK-PCH-NEXT: ], +// CHECK-PCH-NOT: "-fimplicit-modules" +// CHECK-PCH-NOT: "-fimplicit-module-maps" +// CHECK-PCH: "-fmodule-file=[[PREFIX]]/build/[[HASH_MOD_COMMON]]/ModCommon-{{.*}}.pcm" +// CHECK-PCH: ], // CHECK-PCH-NEXT: "file-deps": [ // CHECK-PCH-NEXT: "[[PREFIX]]/pch.h" // CHECK-PCH-NEXT: ], @@ -105,10 +105,10 @@ // CHECK-TU-NEXT: } // CHECK-TU-NEXT: ], // CHECK-TU-NEXT: "command-line": [ -// CHECK-TU: "-fno-implicit-modules", -// CHECK-TU-NEXT: "-fno-implicit-module-maps", -// CHECK-TU-NEXT: "-fmodule-file=[[PREFIX]]/build/[[HASH_MOD_TU:.*]]/ModTU-{{.*}}.pcm" -// CHECK-TU-NEXT: ], +// CHECK-TU-NOT: "-fimplicit-modules", +// CHECK-TU-NOT: "-fimplicit-module-maps", +// CHECK-TU: "-fmodule-file=[[PREFIX]]/build/[[HASH_MOD_TU:.*]]/ModTU-{{.*}}.pcm" +// CHECK-TU: ], // CHECK-TU-NEXT: "file-deps": [ // CHECK-TU-NEXT: "[[PREFIX]]/tu.c", // CHECK-TU-NEXT: "[[PREFIX]]/pch.h.gch" Index: clang/test/ClangScanDeps/modules-pch.c =================================================================== --- clang/test/ClangScanDeps/modules-pch.c +++ clang/test/ClangScanDeps/modules-pch.c @@ -92,11 +92,11 @@ // CHECK-PCH-NEXT: } // CHECK-PCH-NEXT: ], // CHECK-PCH-NEXT: "command-line": [ -// CHECK-PCH: "-fno-implicit-modules", -// CHECK-PCH-NEXT: "-fno-implicit-module-maps", -// CHECK-PCH-NEXT: "-fmodule-file=[[PREFIX]]/build/[[HASH_MOD_COMMON_1]]/ModCommon1-{{.*}}.pcm", -// CHECK-PCH-NEXT: "-fmodule-file=[[PREFIX]]/build/[[HASH_MOD_PCH]]/ModPCH-{{.*}}.pcm" -// CHECK-PCH-NEXT: ], +// CHECK-PCH-NOT: "-fimplicit-modules", +// CHECK-PCH-NOT: "-fmplicit-module-maps", +// CHECK-PCH: "-fmodule-file=[[PREFIX]]/build/[[HASH_MOD_COMMON_1]]/ModCommon1-{{.*}}.pcm", +// CHECK-PCH: "-fmodule-file=[[PREFIX]]/build/[[HASH_MOD_PCH]]/ModPCH-{{.*}}.pcm" +// CHECK-PCH: ], // CHECK-PCH-NEXT: "file-deps": [ // CHECK-PCH-NEXT: "[[PREFIX]]/pch.h" // CHECK-PCH-NEXT: ], @@ -154,10 +154,10 @@ // CHECK-TU-NEXT: } // CHECK-TU-NEXT: ], // CHECK-TU-NEXT: "command-line": [ -// CHECK-TU: "-fno-implicit-modules", -// CHECK-TU-NEXT: "-fno-implicit-module-maps", -// CHECK-TU-NEXT: "-fmodule-file=[[PREFIX]]/build/[[HASH_MOD_TU]]/ModTU-{{.*}}.pcm" -// CHECK-TU-NEXT: ], +// CHECK-TU-NOT: "-fimplicit-modules", +// CHECK-TU-NOT: "-fimplicit-module-maps", +// CHECK-TU: "-fmodule-file=[[PREFIX]]/build/[[HASH_MOD_TU]]/ModTU-{{.*}}.pcm" +// CHECK-TU: ], // CHECK-TU-NEXT: "file-deps": [ // CHECK-TU-NEXT: "[[PREFIX]]/tu.c", // CHECK-TU-NEXT: "[[PREFIX]]/pch.h.gch" @@ -213,11 +213,11 @@ // CHECK-TU-WITH-COMMON-NEXT: } // CHECK-TU-WITH-COMMON-NEXT: ], // CHECK-TU-WITH-COMMON-NEXT: "command-line": [ -// CHECK-TU-WITH-COMMON: "-fno-implicit-modules", -// CHECK-TU-WITH-COMMON-NEXT: "-fno-implicit-module-maps", -// CHECK-TU-WITH-COMMON-NEXT: "-fmodule-file=[[PREFIX]]/build/{{.*}}/ModCommon2-{{.*}}.pcm", -// CHECK-TU-WITH-COMMON-NEXT: "-fmodule-file=[[PREFIX]]/build/[[HASH_MOD_TU_WITH_COMMON]]/ModTUWithCommon-{{.*}}.pcm" -// CHECK-TU-WITH-COMMON-NEXT: ], +// CHECK-TU-WITH-COMMON-NOT: "-fimplicit-modules", +// CHECK-TU-WITH-COMMON-NOT: "-fimplicit-module-maps", +// CHECK-TU-WITH-COMMON: "-fmodule-file=[[PREFIX]]/build/{{.*}}/ModCommon2-{{.*}}.pcm", +// CHECK-TU-WITH-COMMON: "-fmodule-file=[[PREFIX]]/build/[[HASH_MOD_TU_WITH_COMMON]]/ModTUWithCommon-{{.*}}.pcm" +// CHECK-TU-WITH-COMMON: ], // CHECK-TU-WITH-COMMON-NEXT: "file-deps": [ // CHECK-TU-WITH-COMMON-NEXT: "[[PREFIX]]/tu_with_common.c", // CHECK-TU-WITH-COMMON-NEXT: "[[PREFIX]]/pch.h.gch" Index: clang/test/ClangScanDeps/removed-args.c =================================================================== --- clang/test/ClangScanDeps/removed-args.c +++ clang/test/ClangScanDeps/removed-args.c @@ -73,9 +73,10 @@ // CHECK-NEXT: } // CHECK-NEXT: ] // CHECK-NEXT: "command-line": [ -// CHECK-NEXT: "-fsyntax-only", +// CHECK-NEXT: "-cc1", // CHECK-NOT: "-fmodules-cache-path= // CHECK-NOT: "-fmodules-validate-once-per-build-session" +// CHECK-NOT: "-fbuild-session-timestamp= // CHECK-NOT: "-fbuild-session-file= // CHECK-NOT: "-fmodules-prune-interval= // CHECK-NOT: "-fmodules-prune-after=