[clang] Add tracking source deduction guide for the explicitly-written
[llvm-project.git] / clang / test / Modules / prune-non-affecting-module-map-repeated-textual.cpp
blob30914056c55fa2ba4a0bc8360511ce9dd1a0e710
1 // Same as prune-non-affecting-module-map-repeated.cpp, but check that textual-only
2 // inclusions do not cause duplication of the module map files they are defined in.
4 // RUN: rm -rf %t && mkdir %t
5 // RUN: split-file %s %t
7 // RUN: %clang_cc1 -xc++ -fmodules -fno-implicit-modules \
8 // RUN: -fmodule-map-file=%t/base.map -fmodule-map-file=%t/mixed.map\
9 // RUN: -fmodule-map-file=%t/mod1.map \
10 // RUN: -fmodule-name=mod1 -emit-module %t/mod1.map -o %t/mod1.pcm
11 // RUN: %clang_cc1 -xc++ -fmodules -fno-implicit-modules \
12 // RUN: -fmodule-map-file=%t/mixed.map\
13 // RUN: -fmodule-name=mixed -emit-module %t/mixed.map -o %t/mixed.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 -fmodule-file=%t/mixed.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 -fmodule-file=%t/mixed.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 { textual header "vector.h" }
30 //--- mixed.map
31 module mixed { textual header "mixed_text.h" header "mixed_mod.h"}
32 //--- mod1.map
33 module mod1 { header "mod1.h" }
34 //--- mod2.map
35 module mod2 { header "mod2.h" }
36 //--- mod3.map
37 module mod3 { header "mod3.h" }
38 //--- mod4.map
39 module mod4 { header "mod4.h" }
40 //--- check_slocs.cc
41 #include "mod4.h"
42 #include "vector.h"
43 #pragma clang __debug sloc_usage // expected-remark {{source manager location address space usage}}
44 // expected-note@* {{% of available space}}
46 // base.map must only be present once, despite being used in each module.
47 // Because its location in every module compile should be non-affecting.
49 // expected-note@base.map:1 {{file entered 1 time}}
51 // different modules use either only textual header from mixed.map or both textual and modular
52 // headers. Either combination must lead to only 1 use at the end, because the module is ultimately
53 // in the import chain and any textual uses should not change that.
55 // expected-note@mixed.map:1 {{file entered 1 time}}
57 // expected-note@* + {{file entered}}
60 //--- vector.h
61 #ifndef VECTOR_H
62 #define VECTOR_H
63 #endif
65 //--- mixed_text.h
66 #ifndef MIXED_TEXT_H
67 #define MIXED_TEXT_H
68 #endif
69 //--- mixed_mod.h
70 #ifndef MIXED_MOD_H
71 #define MIXED_MOD_H
72 #endif
74 //--- mod1.h
75 #ifndef MOD1
76 #define MOD1
77 #include "vector.h"
78 #include "mixed_text.h"
79 int mod1();
80 #endif
81 //--- mod2.h
82 #ifndef MOD2
83 #define MOD2
84 #include "vector.h"
85 #include "mod1.h"
86 #include "mixed_mod.h"
87 int mod2();
88 #endif
89 //--- mod3.h
90 #ifndef MOD3
91 #define MOD3
92 #include "vector.h"
93 #include "mod2.h"
94 #include "mixed_text.h"
95 #include "mixed_mod.h"
96 int mod3();
97 #endif
98 //--- mod4.h
99 #ifndef MOD4
100 #define MOD4
101 #include "vector.h"
102 #include "mod3.h"
103 int mod4();
104 #endif