r244923 - [modules] Change the way we deal with .d output for explicitly-specified module
Sean Silva via cfe-commits
cfe-commits at lists.llvm.org
Thu Aug 13 17:01:46 PDT 2015
On Thu, Aug 13, 2015 at 10:57 AM, Richard Smith via cfe-commits <
cfe-commits at lists.llvm.org> wrote:
> Author: rsmith
> Date: Thu Aug 13 12:57:10 2015
> New Revision: 244923
>
> URL: http://llvm.org/viewvc/llvm-project?rev=244923&view=rev
> Log:
> [modules] Change the way we deal with .d output for explicitly-specified
> module
> files: include the .pcm file itself in the .d output, rather than
> including its
> own input files. Other forms of module file continue to be transparent for
> .d
> output.
>
> Arguably, the input files for the .pcm file are still inputs to the
> compilation, but that's unnecessary for make-like build systems (where the
> mtime of the .pcm file is sufficient) and harmful for smarter build systems
> that know about module files and want to track only the local dependencies.
>
Nice!
-- Sean Silva
>
> Modified:
> cfe/trunk/include/clang/Serialization/ASTReader.h
> cfe/trunk/lib/Frontend/DependencyFile.cpp
> cfe/trunk/lib/Frontend/ModuleDependencyCollector.cpp
> cfe/trunk/lib/Serialization/ASTReader.cpp
> cfe/trunk/test/Modules/dependency-gen.modulemap
>
> Modified: cfe/trunk/include/clang/Serialization/ASTReader.h
> URL:
> http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/Serialization/ASTReader.h?rev=244923&r1=244922&r2=244923&view=diff
>
> ==============================================================================
> --- cfe/trunk/include/clang/Serialization/ASTReader.h (original)
> +++ cfe/trunk/include/clang/Serialization/ASTReader.h Thu Aug 13 12:57:10
> 2015
> @@ -179,7 +179,8 @@ public:
> unsigned Value) {}
>
> /// This is called for each AST file loaded.
> - virtual void visitModuleFile(StringRef Filename) {}
> + virtual void visitModuleFile(StringRef Filename,
> + serialization::ModuleKind Kind) {}
>
> /// \brief Returns true if this \c ASTReaderListener wants to receive
> the
> /// input files of the AST file via \c visitInputFile, false otherwise.
> @@ -194,7 +195,7 @@ public:
> ///
> /// \returns true to continue receiving the next input file, false to
> stop.
> virtual bool visitInputFile(StringRef Filename, bool isSystem,
> - bool isOverridden) {
> + bool isOverridden, bool isExplicitModule) {
> return true;
> }
>
> @@ -242,9 +243,10 @@ public:
> void ReadCounter(const serialization::ModuleFile &M, unsigned Value)
> override;
> bool needsInputFileVisitation() override;
> bool needsSystemInputFileVisitation() override;
> - void visitModuleFile(StringRef Filename) override;
> + void visitModuleFile(StringRef Filename,
> + serialization::ModuleKind Kind) override;
> bool visitInputFile(StringRef Filename, bool isSystem,
> - bool isOverridden) override;
> + bool isOverridden, bool isExplicitModule) override;
> };
>
> /// \brief ASTReaderListener implementation to validate the information of
>
> Modified: cfe/trunk/lib/Frontend/DependencyFile.cpp
> URL:
> http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Frontend/DependencyFile.cpp?rev=244923&r1=244922&r2=244923&view=diff
>
> ==============================================================================
> --- cfe/trunk/lib/Frontend/DependencyFile.cpp (original)
> +++ cfe/trunk/lib/Frontend/DependencyFile.cpp Thu Aug 13 12:57:10 2015
> @@ -104,14 +104,15 @@ struct DepCollectorASTListener : public
> bool needsSystemInputFileVisitation() override {
> return DepCollector.needSystemDependencies();
> }
> - void visitModuleFile(StringRef Filename) override {
> + void visitModuleFile(StringRef Filename,
> + serialization::ModuleKind Kind) override {
> DepCollector.maybeAddDependency(Filename, /*FromModule*/true,
> /*IsSystem*/false,
> /*IsModuleFile*/true,
> /*IsMissing*/false);
> }
> bool visitInputFile(StringRef Filename, bool IsSystem,
> - bool IsOverridden) override {
> - if (IsOverridden)
> + bool IsOverridden, bool IsExplicitModule) override {
> + if (IsOverridden || IsExplicitModule)
> return true;
>
> DepCollector.maybeAddDependency(Filename, /*FromModule*/true,
> IsSystem,
> @@ -226,9 +227,10 @@ public:
> bool needsSystemInputFileVisitation() override {
> return Parent.includeSystemHeaders();
> }
> - void visitModuleFile(StringRef Filename) override;
> + void visitModuleFile(StringRef Filename,
> + serialization::ModuleKind Kind) override;
> bool visitInputFile(StringRef Filename, bool isSystem,
> - bool isOverridden) override;
> + bool isOverridden, bool isExplicitModule) override;
> };
> }
>
> @@ -472,16 +474,18 @@ void DFGImpl::OutputDependencyFile() {
> }
>
> bool DFGASTReaderListener::visitInputFile(llvm::StringRef Filename,
> - bool IsSystem, bool
> IsOverridden) {
> + bool IsSystem, bool
> IsOverridden,
> + bool IsExplicitModule) {
> assert(!IsSystem || needsSystemInputFileVisitation());
> - if (IsOverridden)
> + if (IsOverridden || IsExplicitModule)
> return true;
>
> Parent.AddFilename(Filename);
> return true;
> }
>
> -void DFGASTReaderListener::visitModuleFile(llvm::StringRef Filename) {
> - if (Parent.includeModuleFiles())
> +void DFGASTReaderListener::visitModuleFile(llvm::StringRef Filename,
> + serialization::ModuleKind
> Kind) {
> + if (Parent.includeModuleFiles() || Kind == MK_ExplicitModule)
> Parent.AddFilename(Filename);
> }
>
> Modified: cfe/trunk/lib/Frontend/ModuleDependencyCollector.cpp
> URL:
> http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Frontend/ModuleDependencyCollector.cpp?rev=244923&r1=244922&r2=244923&view=diff
>
> ==============================================================================
> --- cfe/trunk/lib/Frontend/ModuleDependencyCollector.cpp (original)
> +++ cfe/trunk/lib/Frontend/ModuleDependencyCollector.cpp Thu Aug 13
> 12:57:10 2015
> @@ -32,8 +32,8 @@ public:
> : Collector(Collector) {}
> bool needsInputFileVisitation() override { return true; }
> bool needsSystemInputFileVisitation() override { return true; }
> - bool visitInputFile(StringRef Filename, bool IsSystem,
> - bool IsOverridden) override;
> + bool visitInputFile(StringRef Filename, bool IsSystem, bool
> IsOverridden,
> + bool IsExplicitModule) override;
> };
> }
>
> @@ -85,7 +85,8 @@ std::error_code ModuleDependencyListener
> }
>
> bool ModuleDependencyListener::visitInputFile(StringRef Filename, bool
> IsSystem,
> - bool IsOverridden) {
> + bool IsOverridden,
> + bool IsExplicitModule) {
> if (Collector.insertSeen(Filename))
> if (copyToRoot(Filename))
> Collector.setHasErrors();
>
> Modified: cfe/trunk/lib/Serialization/ASTReader.cpp
> URL:
> http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Serialization/ASTReader.cpp?rev=244923&r1=244922&r2=244923&view=diff
>
> ==============================================================================
> --- cfe/trunk/lib/Serialization/ASTReader.cpp (original)
> +++ cfe/trunk/lib/Serialization/ASTReader.cpp Thu Aug 13 12:57:10 2015
> @@ -138,20 +138,24 @@ bool ChainedASTReaderListener::needsSyst
> return First->needsSystemInputFileVisitation() ||
> Second->needsSystemInputFileVisitation();
> }
> -void ChainedASTReaderListener::visitModuleFile(StringRef Filename) {
> - First->visitModuleFile(Filename);
> - Second->visitModuleFile(Filename);
> +void ChainedASTReaderListener::visitModuleFile(StringRef Filename,
> + ModuleKind Kind) {
> + First->visitModuleFile(Filename, Kind);
> + Second->visitModuleFile(Filename, Kind);
> }
> bool ChainedASTReaderListener::visitInputFile(StringRef Filename,
> bool isSystem,
> - bool isOverridden) {
> + bool isOverridden,
> + bool isExplicitModule) {
> bool Continue = false;
> if (First->needsInputFileVisitation() &&
> (!isSystem || First->needsSystemInputFileVisitation()))
> - Continue |= First->visitInputFile(Filename, isSystem, isOverridden);
> + Continue |= First->visitInputFile(Filename, isSystem, isOverridden,
> + isExplicitModule);
> if (Second->needsInputFileVisitation() &&
> (!isSystem || Second->needsSystemInputFileVisitation()))
> - Continue |= Second->visitInputFile(Filename, isSystem, isOverridden);
> + Continue |= Second->visitInputFile(Filename, isSystem, isOverridden,
> + isExplicitModule);
> return Continue;
> }
>
> @@ -2106,7 +2110,7 @@ ASTReader::ReadControlBlock(ModuleFile &
> }
>
> if (Listener)
> - Listener->visitModuleFile(F.FileName);
> + Listener->visitModuleFile(F.FileName, F.Kind);
>
> if (Listener && Listener->needsInputFileVisitation()) {
> unsigned N = Listener->needsSystemInputFileVisitation() ?
> NumInputs
> @@ -2114,7 +2118,8 @@ ASTReader::ReadControlBlock(ModuleFile &
> for (unsigned I = 0; I < N; ++I) {
> bool IsSystem = I >= NumUserInputs;
> InputFileInfo FI = readInputFileInfo(F, I+1);
> - Listener->visitInputFile(FI.Filename, IsSystem, FI.Overridden);
> + Listener->visitInputFile(FI.Filename, IsSystem, FI.Overridden,
> + F.Kind == MK_ExplicitModule);
> }
> }
>
> @@ -4194,8 +4199,8 @@ bool ASTReader::readASTFileControlBlock(
> bool Overridden = static_cast<bool>(Record[3]);
> std::string Filename = Blob;
> ResolveImportedPath(Filename, ModuleDir);
> - shouldContinue =
> - Listener.visitInputFile(Filename, isSystemFile, Overridden);
> + shouldContinue = Listener.visitInputFile(
> + Filename, isSystemFile, Overridden,
> /*IsExplicitModule*/false);
> break;
> }
> if (!shouldContinue)
>
> Modified: cfe/trunk/test/Modules/dependency-gen.modulemap
> URL:
> http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Modules/dependency-gen.modulemap?rev=244923&r1=244922&r2=244923&view=diff
>
> ==============================================================================
> --- cfe/trunk/test/Modules/dependency-gen.modulemap (original)
> +++ cfe/trunk/test/Modules/dependency-gen.modulemap Thu Aug 13 12:57:10
> 2015
> @@ -1,9 +1,9 @@
> // RUN: cd %S
> // RUN: rm -rf %t
> //
> -// RUN: %clang_cc1 -I. -x c++ -fmodule-name=test -fmodules -emit-module
> -fno-validate-pch -fmodules-strict-decluse %s -dependency-file - -MT
> implicit.pcm -o %t/implicit.pcm -fmodules-cache-path=%t
> -fmodule-map-file-home-is-cwd | FileCheck %s --check-prefix=IMPLICIT
> +// RUN: %clang_cc1 -I. -x c++ -fmodule-name=test -fmodules -emit-module
> -fno-validate-pch -fmodules-strict-decluse %s -dependency-file - -MT
> implicit.pcm -o %t/implicit.pcm -fmodules-cache-path=%t
> -fmodule-map-file-home-is-cwd
> -fmodule-map-file=%S/Inputs/dependency-gen-base.modulemap | FileCheck %s
> --check-prefix=IMPLICIT
> //
> -// 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
> +// 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
> module "test" {
> export *
> @@ -11,8 +11,6 @@ module "test" {
> use "test-base"
> use "test-base2"
> }
> -extern module "test-base2" "Inputs/dependency-gen-base2.modulemap"
> -extern module "test-base" "Inputs/dependency-gen-base.modulemap"
>
> // For implicit use of a module via the module cache, the input files
> // referenced by the .pcm are also dependencies of this build.
> @@ -28,16 +26,11 @@ extern module "test-base" "Inputs/depend
> // and included headers are not dependencies of this target (they are
> instead
> // dependencies of the explicitly-specified .pcm input).
> //
> -// FIXME: We should avoid loading the other referenced module maps (we
> already
> -// have a parsed copy of their contents from the .pcm file) and thus not
> list
> -// them here.
> -//
> -// FIXME: We should list a dependency on the explicitly specified .pcm
> files
> -// (whether or not -module-file-deps is specified on the command line).
> -//
> -// EXPLICIT-FIXME-NOT: dependency-gen-
> -// EXPLICIT-FIXME: {{.*}}/base.pcm
> -//
> // EXPLICIT: {{^}}explicit.pcm:
> +// EXPLICIT-NOT: dependency-gen-
> +// EXPLICIT: base.pcm
> +// EXPLICIT-NOT: dependency-gen-
> // EXPLICIT: {{.*[/\\]}}dependency-gen.modulemap
> +// EXPLICIT-NOT: dependency-gen-
> // EXPLICIT: {{ |\.[/\\]}}Inputs{{[/\\]}}dependency-gen.h
> +// EXPLICIT-NOT: dependency-gen-
>
>
> _______________________________________________
> cfe-commits mailing list
> cfe-commits at lists.llvm.org
> http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/cfe-commits/attachments/20150813/af9265f2/attachment-0001.html>
More information about the cfe-commits
mailing list