]> granicus.if.org Git - clang/commitdiff
Extend -Rmodule-build to also remark when module building finishes.
authorRichard Smith <richard-llvm@metafoo.co.uk>
Tue, 14 Oct 2014 02:08:30 +0000 (02:08 +0000)
committerRichard Smith <richard-llvm@metafoo.co.uk>
Tue, 14 Oct 2014 02:08:30 +0000 (02:08 +0000)
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

include/clang/Basic/DiagnosticFrontendKinds.td
include/clang/Basic/DiagnosticGroups.td
lib/Frontend/CompilerInstance.cpp
test/Modules/Rmodule-build.m

index c0c2227d86c0f70e1c7ebd3ac38b696bc507edcc..fa12eee3990fe411d3e41cb3f461dc35dc827e69 100644 (file)
@@ -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<DiagGroup<"module-build">>;
+  InGroup<ModuleBuild>;
+def remark_module_build_done : Remark<"finished building module '%0'">,
+  InGroup<ModuleBuild>;
 
 def err_conflicting_module_names : Error<
   "conflicting module names specified: '-fmodule-name=%0' and "
index 19c08d36dc275dab501d96343f8a8e57d87c5a65..78908e28464270dfb57ca412fcd39ddfa21c57d2 100644 (file)
@@ -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">;
index 923881c2efe385d1765b0753f61b9f2d489f5d53..e1803d0f31170b882a868dcfd283e29fe9999310 100644 (file)
@@ -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 &&
index 3aba1857bcffcdb4ef4c8a2b6cfc5293c391ccfd..ecd96cf6475102b7dbca11bc99eb132ce48048ef 100644 (file)
@@ -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'