xref: /aosp_15_r20/external/clang/test/Modules/fmodules-validate-once-per-build-session.c (revision 67e74705e28f6214e480b399dd47ea732279e315)
1*67e74705SXin Li #include "foo.h"
2*67e74705SXin Li 
3*67e74705SXin Li // Clear the module cache.
4*67e74705SXin Li // RUN: rm -rf %t
5*67e74705SXin Li // RUN: mkdir -p %t/Inputs
6*67e74705SXin Li // RUN: mkdir -p %t/modules-to-compare
7*67e74705SXin Li 
8*67e74705SXin Li // ===
9*67e74705SXin Li // Create a module.  We will use -I or -isystem to determine whether to treat
10*67e74705SXin Li // foo.h as a system header.
11*67e74705SXin Li // RUN: echo 'void meow(void);' > %t/Inputs/foo.h
12*67e74705SXin Li // RUN: echo 'module Foo { header "foo.h" }' > %t/Inputs/module.map
13*67e74705SXin Li 
14*67e74705SXin Li // ===
15*67e74705SXin Li // Compile the module.
16*67e74705SXin Li // RUN: %clang_cc1 -cc1 -fmodules -fimplicit-module-maps -fdisable-module-hash -fmodules-cache-path=%t/modules-cache -fsyntax-only -isystem %t/Inputs -fbuild-session-timestamp=1390000000 -fmodules-validate-once-per-build-session %s
17*67e74705SXin Li // RUN: %clang_cc1 -cc1 -fmodules -fimplicit-module-maps -fdisable-module-hash -fmodules-cache-path=%t/modules-cache-user -fsyntax-only -I %t/Inputs -fbuild-session-timestamp=1390000000 -fmodules-validate-once-per-build-session %s
18*67e74705SXin Li // RUN: ls -R %t/modules-cache | grep Foo.pcm.timestamp
19*67e74705SXin Li // RUN: ls -R %t/modules-cache-user | grep Foo.pcm.timestamp
20*67e74705SXin Li // RUN: cp %t/modules-cache/Foo.pcm %t/modules-to-compare/Foo-before.pcm
21*67e74705SXin Li // RUN: cp %t/modules-cache-user/Foo.pcm %t/modules-to-compare/Foo-before-user.pcm
22*67e74705SXin Li 
23*67e74705SXin Li // ===
24*67e74705SXin Li // Use it, and make sure that we did not recompile it.
25*67e74705SXin Li // RUN: %clang_cc1 -cc1 -fmodules -fimplicit-module-maps -fdisable-module-hash -fmodules-cache-path=%t/modules-cache -fsyntax-only -isystem %t/Inputs -fbuild-session-timestamp=1390000000 -fmodules-validate-once-per-build-session %s
26*67e74705SXin Li // RUN: %clang_cc1 -cc1 -fmodules -fimplicit-module-maps -fdisable-module-hash -fmodules-cache-path=%t/modules-cache-user -fsyntax-only -I %t/Inputs -fbuild-session-timestamp=1390000000 -fmodules-validate-once-per-build-session %s
27*67e74705SXin Li // RUN: ls -R %t/modules-cache | grep Foo.pcm.timestamp
28*67e74705SXin Li // RUN: ls -R %t/modules-cache-user | grep Foo.pcm.timestamp
29*67e74705SXin Li // RUN: cp %t/modules-cache/Foo.pcm %t/modules-to-compare/Foo-after.pcm
30*67e74705SXin Li // RUN: cp %t/modules-cache-user/Foo.pcm %t/modules-to-compare/Foo-after-user.pcm
31*67e74705SXin Li 
32*67e74705SXin Li // RUN: diff %t/modules-to-compare/Foo-before.pcm %t/modules-to-compare/Foo-after.pcm
33*67e74705SXin Li // RUN: diff %t/modules-to-compare/Foo-before-user.pcm %t/modules-to-compare/Foo-after-user.pcm
34*67e74705SXin Li 
35*67e74705SXin Li // ===
36*67e74705SXin Li // Change the sources.
37*67e74705SXin Li // RUN: echo 'void meow2(void);' > %t/Inputs/foo.h
38*67e74705SXin Li 
39*67e74705SXin Li // ===
40*67e74705SXin Li // Use the module, and make sure that we did not recompile it if foo.h is a
41*67e74705SXin Li // system header, even though the sources changed.
42*67e74705SXin Li // RUN: %clang_cc1 -cc1 -fmodules -fimplicit-module-maps -fdisable-module-hash -fmodules-cache-path=%t/modules-cache -fsyntax-only -isystem %t/Inputs -fbuild-session-timestamp=1390000000 -fmodules-validate-once-per-build-session %s
43*67e74705SXin Li // RUN: %clang_cc1 -cc1 -fmodules -fimplicit-module-maps -fdisable-module-hash -fmodules-cache-path=%t/modules-cache-user -fsyntax-only -I %t/Inputs -fbuild-session-timestamp=1390000000 -fmodules-validate-once-per-build-session %s
44*67e74705SXin Li // RUN: ls -R %t/modules-cache | grep Foo.pcm.timestamp
45*67e74705SXin Li // RUN: ls -R %t/modules-cache-user | grep Foo.pcm.timestamp
46*67e74705SXin Li // RUN: cp %t/modules-cache/Foo.pcm %t/modules-to-compare/Foo-after.pcm
47*67e74705SXin Li // RUN: cp %t/modules-cache-user/Foo.pcm %t/modules-to-compare/Foo-after-user.pcm
48*67e74705SXin Li 
49*67e74705SXin Li // RUN: diff %t/modules-to-compare/Foo-before.pcm %t/modules-to-compare/Foo-after.pcm
50*67e74705SXin Li // When foo.h is a user header, we will always validate it.
51*67e74705SXin Li // RUN: not diff %t/modules-to-compare/Foo-before-user.pcm %t/modules-to-compare/Foo-after-user.pcm
52*67e74705SXin Li 
53*67e74705SXin Li // ===
54*67e74705SXin Li // Recompile the module if the today's date is before 01 January 2030.
55*67e74705SXin Li // RUN: %clang_cc1 -cc1 -fmodules -fimplicit-module-maps -fdisable-module-hash -fmodules-cache-path=%t/modules-cache -fsyntax-only -isystem %t/Inputs -fbuild-session-timestamp=1893456000 -fmodules-validate-once-per-build-session %s
56*67e74705SXin Li // RUN: ls -R %t/modules-cache | grep Foo.pcm.timestamp
57*67e74705SXin Li // RUN: cp %t/modules-cache/Foo.pcm %t/modules-to-compare/Foo-after.pcm
58*67e74705SXin Li 
59*67e74705SXin Li // RUN: not diff %t/modules-to-compare/Foo-before.pcm %t/modules-to-compare/Foo-after.pcm
60