[PATCH] D66907: [Modules] Fix rebuilding an updated module for each of its consumers.
Volodymyr Sapsai via Phabricator via llvm-commits
llvm-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/llvm-commits/attachments/20190828/62d74a4c/attachment.bin>
More information about the llvm-commits
mailing list