[clang] Implement lifetime analysis for lifetime_capture_by(X) (#115921)
[llvm-project.git] / clang / test / Modules / prune-non-affecting-module-map-repeated.cpp
blob2c09bc4b01b02622a8214fc84c00b59ad5da4373
1 // Check that the same module map file passed to -fmodule-map-file *and*
2 // available from one of the `-fmodule-file` does not allocate extra source
3 // location space. This optimization is important for using module maps in
4 // large codebases to avoid running out of source location space.
6 // RUN: rm -rf %t && mkdir %t
7 // RUN: split-file %s %t
9 // RUN: %clang_cc1 -xc++ -fmodules -fno-implicit-modules -fmodule-map-file=%t/base.map -fmodule-name=base -emit-module %t/base.map -o %t/base.pcm
10 // RUN: %clang_cc1 -xc++ -fmodules -fno-implicit-modules \
11 // RUN: -fmodule-map-file=%t/base.map -fmodule-map-file=%t/mod1.map \
12 // RUN: -fmodule-file=%t/base.pcm \
13 // RUN: -fmodule-name=mod1 -emit-module %t/mod1.map -o %t/mod1.pcm
14 // RUN: %clang_cc1 -xc++ -fmodules -fno-implicit-modules \
15 // RUN: -fmodule-map-file=%t/base.map -fmodule-map-file=%t/mod1.map -fmodule-map-file=%t/mod2.map \
16 // RUN: -fmodule-file=%t/mod1.pcm \
17 // RUN: -fmodule-name=mod2 -emit-module %t/mod2.map -o %t/mod2.pcm
18 // RUN: %clang_cc1 -xc++ -fmodules -fno-implicit-modules \
19 // RUN: -fmodule-map-file=%t/base.map -fmodule-map-file=%t/mod2.map -fmodule-map-file=%t/mod3.map \
20 // RUN: -fmodule-file=%t/mod2.pcm \
21 // RUN: -fmodule-name=mod3 -emit-module %t/mod3.map -o %t/mod3.pcm
22 // RUN: %clang_cc1 -xc++ -fmodules -fno-implicit-modules \
23 // RUN: -fmodule-map-file=%t/base.map -fmodule-map-file=%t/mod3.map -fmodule-map-file=%t/mod4.map \
24 // RUN: -fmodule-file=%t/mod3.pcm \
25 // RUN: -fmodule-name=mod4 -emit-module %t/mod4.map -o %t/mod4.pcm
26 // RUN: %clang_cc1 -xc++ -fmodules -fno-implicit-modules -fmodule-map-file=%t/base.map -fmodule-map-file=%t/mod4.map -fmodule-file=%t/mod4.pcm -fsyntax-only -verify %t/check_slocs.cc
28 //--- base.map
29 module base { header "vector.h" }
30 //--- mod1.map
31 module mod1 { header "mod1.h" }
32 //--- mod2.map
33 module mod2 { header "mod2.h" }
34 //--- mod3.map
35 module mod3 { header "mod3.h" }
36 //--- mod4.map
37 module mod4 { header "mod4.h" }
38 //--- check_slocs.cc
39 #include "mod4.h"
40 #pragma clang __debug sloc_usage // expected-remark {{source manager location address space usage}}
41 // expected-note@* {{% of available space}}
43 // Module map files files that were specified on the command line are entered twice (once when parsing command-line, once loaded from the .pcm)
44 // Those that not specified on the command line must be entered once.
46 // expected-note@base.map:1 {{file entered 2 times}}
47 // expected-note@mod4.map:1 {{file entered 2 times}}
48 // expected-note@mod1.map:1 {{file entered 1 time}}
49 // expected-note@mod2.map:1 {{file entered 1 time}}
50 // expected-note@mod3.map:1 {{file entered 1 time}}
51 // expected-note@* + {{file entered}}
54 //--- vector.h
55 #ifndef VECTOR_H
56 #define VECTOR_H
57 #endif
59 //--- mod1.h
60 #ifndef MOD1
61 #define MOD1
62 #include "vector.h"
63 int mod1();
64 #endif
65 //--- mod2.h
66 #ifndef MOD2
67 #define MOD2
68 #include "vector.h"
69 #include "mod1.h"
70 int mod2();
71 #endif
72 //--- mod3.h
73 #ifndef MOD3
74 #define MOD3
75 #include "vector.h"
76 #include "mod2.h"
77 int mod3();
78 #endif
79 //--- mod4.h
80 #ifndef MOD4
81 #define MOD4
82 #include "vector.h"
83 #include "mod3.h"
84 int mod4();
85 #endif