From: Richard Smith Date: Tue, 14 Oct 2014 02:08:30 +0000 (+0000) Subject: Extend -Rmodule-build to also remark when module building finishes. X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=aaa733793e84107f8cd869ceae1662b6bf8a9d9f;p=clang Extend -Rmodule-build to also remark when module building finishes. In cases of nested module builds, or when you care how long module builds take, this information was not previously easily available / obvious. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@219658 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/include/clang/Basic/DiagnosticFrontendKinds.td b/include/clang/Basic/DiagnosticFrontendKinds.td index c0c2227d86..fa12eee399 100644 --- a/include/clang/Basic/DiagnosticFrontendKinds.td +++ b/include/clang/Basic/DiagnosticFrontendKinds.td @@ -170,7 +170,9 @@ def warn_module_config_macro_undef : Warning< def note_module_def_undef_here : Note< "macro was %select{defined|#undef'd}0 here">; def remark_module_build : Remark<"building module '%0' as '%1'">, - InGroup>; + InGroup; +def remark_module_build_done : Remark<"finished building module '%0'">, + InGroup; def err_conflicting_module_names : Error< "conflicting module names specified: '-fmodule-name=%0' and " diff --git a/include/clang/Basic/DiagnosticGroups.td b/include/clang/Basic/DiagnosticGroups.td index 19c08d36dc..78908e2846 100644 --- a/include/clang/Basic/DiagnosticGroups.td +++ b/include/clang/Basic/DiagnosticGroups.td @@ -231,6 +231,7 @@ def MismatchedParameterTypes : DiagGroup<"mismatched-parameter-types">; def MismatchedReturnTypes : DiagGroup<"mismatched-return-types">; def MismatchedTags : DiagGroup<"mismatched-tags">; def MissingFieldInitializers : DiagGroup<"missing-field-initializers">; +def ModuleBuild : DiagGroup<"module-build">; def ModuleConflict : DiagGroup<"module-conflict">; def NewlineEOF : DiagGroup<"newline-eof">; def NullArithmetic : DiagGroup<"null-arithmetic">; diff --git a/lib/Frontend/CompilerInstance.cpp b/lib/Frontend/CompilerInstance.cpp index 923881c2ef..e1803d0f31 100644 --- a/lib/Frontend/CompilerInstance.cpp +++ b/lib/Frontend/CompilerInstance.cpp @@ -963,7 +963,11 @@ static bool compileModuleImpl(CompilerInstance &ImportingInstance, // safe because the FileManager is shared between the compiler instances. GenerateModuleAction CreateModuleAction( ModMap.getModuleMapFileForUniquing(Module), Module->IsSystem); - + + ImportingInstance.getDiagnostics().Report(ImportLoc, + diag::remark_module_build) + << Module->Name << ModuleFileName; + // Execute the action to actually build the module in-place. Use a separate // thread so that we get a stack large enough. const unsigned ThreadStackSize = 8 << 20; @@ -971,6 +975,10 @@ static bool compileModuleImpl(CompilerInstance &ImportingInstance, CRC.RunSafelyOnThread([&]() { Instance.ExecuteAction(CreateModuleAction); }, ThreadStackSize); + ImportingInstance.getDiagnostics().Report(ImportLoc, + diag::remark_module_build_done) + << Module->Name; + // Delete the temporary module map file. // FIXME: Even though we're executing under crash protection, it would still // be nice to do this with RemoveFileOnSignal when we can. However, that @@ -1352,9 +1360,6 @@ CompilerInstance::loadModule(SourceLocation ImportLoc, return ModuleLoadResult(); } - getDiagnostics().Report(ImportLoc, diag::remark_module_build) - << ModuleName << ModuleFileName; - // Check whether we have already attempted to build this module (but // failed). if (getPreprocessorOpts().FailedModules && diff --git a/test/Modules/Rmodule-build.m b/test/Modules/Rmodule-build.m index 3aba1857bc..ecd96cf647 100644 --- a/test/Modules/Rmodule-build.m +++ b/test/Modules/Rmodule-build.m @@ -2,23 +2,25 @@ // RUN: rm -rf %t // RUN: mkdir %t // RUN: echo '// A' > %t/A.h -// RUN: echo '// B' > %t/B.h +// RUN: echo '#include "C.h"' > %t/B.h +// RUN: echo '// C' > %t/C.h // RUN: echo 'module A { header "A.h" }' > %t/module.modulemap // RUN: echo 'module B { header "B.h" }' >> %t/module.modulemap +// RUN: echo 'module C { header "C.h" }' >> %t/module.modulemap // RUN: %clang_cc1 -fmodules -fmodules-cache-path=%t -fsyntax-only %s -verify \ // RUN: -I %t -Rmodule-build -@import A; // expected-remark{{building module 'A' as}} -@import B; // expected-remark{{building module 'B' as}} +@import A; // expected-remark{{building module 'A' as}} expected-remark {{finished building module 'A'}} +@import B; // expected-remark{{building module 'B' as}} expected-remark {{finished building module 'B'}} @import A; // no diagnostic @import B; // no diagnostic -// RUN: echo ' ' >> %t/B.h +// RUN: echo ' ' >> %t/C.h // RUN: %clang_cc1 -fmodules -fmodules-cache-path=%t -fsyntax-only %s -I %t \ // RUN: -Rmodule-build 2>&1 | FileCheck %s -// RUN: echo ' ' >> %t/B.h +// RUN: echo ' ' >> %t/C.h // RUN: %clang_cc1 -fmodules -fmodules-cache-path=%t -fsyntax-only %s -I %t \ // RUN: -Reverything 2>&1 | FileCheck %s @@ -33,5 +35,8 @@ // CHECK-NOT: building module 'A' // CHECK: building module 'B' +// CHECK: building module 'C' +// CHECK: finished building module 'C' +// CHECK: finished building module 'B' // NO-REMARKS-NOT: building module 'A' // NO-REMARKS-NOT: building module 'B'