[PATCH] D66907: [Modules] Fix rebuilding an updated module for each of its consumers.

Volodymyr Sapsai via Phabricator via cfe-commits cfe-commits at lists.llvm.org
Wed Aug 28 16:32:48 PDT 2019


This revision was automatically updated to reflect the committed changes.
Closed by commit rL370274: [Modules] Fix rebuilding an updated module for each of its consumers. (authored by vsapsai, committed by ).
Herald added a project: LLVM.
Herald added a subscriber: llvm-commits.

Changed prior to commit:
  https://reviews.llvm.org/D66907?vs=217729&id=217740#toc

Repository:
  rL LLVM

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D66907/new/

https://reviews.llvm.org/D66907

Files:
  cfe/trunk/lib/Serialization/ModuleManager.cpp
  cfe/trunk/test/Modules/Inputs/implicit-invalidate-common/A.h
  cfe/trunk/test/Modules/Inputs/implicit-invalidate-common/B.h
  cfe/trunk/test/Modules/Inputs/implicit-invalidate-common/Common.h
  cfe/trunk/test/Modules/Inputs/implicit-invalidate-common/module.modulemap
  cfe/trunk/test/Modules/implicit-invalidate-common.c


Index: cfe/trunk/lib/Serialization/ModuleManager.cpp
===================================================================
--- cfe/trunk/lib/Serialization/ModuleManager.cpp
+++ cfe/trunk/lib/Serialization/ModuleManager.cpp
@@ -204,13 +204,8 @@
   // Read the signature eagerly now so that we can check it.  Avoid calling
   // ReadSignature unless there's something to check though.
   if (ExpectedSignature && checkSignature(ReadSignature(NewModule->Data),
-                                          ExpectedSignature, ErrorStr)) {
-    // Try to remove the buffer.  If it can't be removed, then it was already
-    // validated by this process.
-    if (!getModuleCache().tryToDropPCM(NewModule->FileName))
-      FileMgr.invalidateCache(NewModule->File);
+                                          ExpectedSignature, ErrorStr))
     return OutOfDate;
-  }
 
   // We're keeping this module.  Store it everywhere.
   Module = Modules[Entry] = NewModule.get();
Index: cfe/trunk/test/Modules/Inputs/implicit-invalidate-common/module.modulemap
===================================================================
--- cfe/trunk/test/Modules/Inputs/implicit-invalidate-common/module.modulemap
+++ cfe/trunk/test/Modules/Inputs/implicit-invalidate-common/module.modulemap
@@ -0,0 +1,3 @@
+module A { header "A.h" }
+module B { header "B.h" }
+module Common { header "Common.h" }
Index: cfe/trunk/test/Modules/Inputs/implicit-invalidate-common/B.h
===================================================================
--- cfe/trunk/test/Modules/Inputs/implicit-invalidate-common/B.h
+++ cfe/trunk/test/Modules/Inputs/implicit-invalidate-common/B.h
@@ -0,0 +1,2 @@
+// B
+#include "Common.h"
Index: cfe/trunk/test/Modules/Inputs/implicit-invalidate-common/A.h
===================================================================
--- cfe/trunk/test/Modules/Inputs/implicit-invalidate-common/A.h
+++ cfe/trunk/test/Modules/Inputs/implicit-invalidate-common/A.h
@@ -0,0 +1,2 @@
+// A
+#include "Common.h"
Index: cfe/trunk/test/Modules/Inputs/implicit-invalidate-common/Common.h
===================================================================
--- cfe/trunk/test/Modules/Inputs/implicit-invalidate-common/Common.h
+++ cfe/trunk/test/Modules/Inputs/implicit-invalidate-common/Common.h
@@ -0,0 +1 @@
+// Common
Index: cfe/trunk/test/Modules/implicit-invalidate-common.c
===================================================================
--- cfe/trunk/test/Modules/implicit-invalidate-common.c
+++ cfe/trunk/test/Modules/implicit-invalidate-common.c
@@ -0,0 +1,36 @@
+// REQUIRES: shell
+// RUN: rm -rf %t
+// RUN: mkdir -p %t/implicit-invalidate-common
+// RUN: cp -r %S/Inputs/implicit-invalidate-common %t/
+// RUN: echo '#include "A.h"' > %t/A.c
+// RUN: echo '#include "B.h"' > %t/B.c
+
+// Build with an empty module cache. Module 'Common' should be built only once.
+//
+// RUN: %clang_cc1 -fmodules -fimplicit-module-maps -fmodules-cache-path=%t/Cache \
+// RUN:     -fsyntax-only -I %t/implicit-invalidate-common -Rmodule-build \
+// RUN:     %t/A.c 2> %t/initial_build.txt
+// RUN: %clang_cc1 -fmodules -fimplicit-module-maps -fmodules-cache-path=%t/Cache \
+// RUN:     -fsyntax-only -I %t/implicit-invalidate-common -Rmodule-build \
+// RUN:     %t/B.c 2>> %t/initial_build.txt
+// RUN: FileCheck %s --implicit-check-not "remark:" --input-file %t/initial_build.txt
+
+// Update module 'Common' and build with the populated module cache. Module
+// 'Common' still should be built only once. Note that we are using the same
+// flags for A.c and B.c to avoid building Common.pcm at different paths.
+//
+// RUN: echo ' // ' >> %t/implicit-invalidate-common/Common.h
+// RUN: %clang_cc1 -fmodules -fimplicit-module-maps -fmodules-cache-path=%t/Cache \
+// RUN:     -fsyntax-only -I %t/implicit-invalidate-common -Rmodule-build \
+// RUN:     %t/A.c 2> %t/incremental_build.txt
+// RUN: %clang_cc1 -fmodules -fimplicit-module-maps -fmodules-cache-path=%t/Cache \
+// RUN:     -fsyntax-only -I %t/implicit-invalidate-common -Rmodule-build \
+// RUN:     %t/B.c 2>> %t/incremental_build.txt
+// RUN: FileCheck %s --implicit-check-not "remark:" --input-file %t/incremental_build.txt
+
+// CHECK: remark: building module 'A'
+// CHECK: remark: building module 'Common'
+// CHECK: remark: finished building module 'Common'
+// CHECK: remark: finished building module 'A'
+// CHECK: remark: building module 'B'
+// CHECK: remark: finished building module 'B'


-------------- next part --------------
A non-text attachment was scrubbed...
Name: D66907.217740.patch
Type: text/x-patch
Size: 4446 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/cfe-commits/attachments/20190828/62d74a4c/attachment.bin>


More information about the cfe-commits mailing list