1 | // RUN: rm -rf %t |
2 | // RUN: cd %S |
3 | // |
4 | // RUN: %clang_cc1 -fmodules -x c++ -fmodules-cache-path=%t \ |
5 | // RUN: -v \ |
6 | // RUN: -iquote Inputs/macro-ambiguity/a/quote \ |
7 | // RUN: -isystem Inputs/macro-ambiguity/a/system \ |
8 | // RUN: -fno-implicit-modules \ |
9 | // RUN: -fmodule-map-file-home-is-cwd \ |
10 | // RUN: -emit-module -fmodule-name=a -o %t/a.pcm \ |
11 | // RUN: Inputs/macro-ambiguity/module.modulemap |
12 | // |
13 | // RUN: %clang_cc1 -fmodules -x c++ -fmodules-cache-path=%t \ |
14 | // RUN: -v \ |
15 | // RUN: -iquote Inputs/macro-ambiguity/b/quote \ |
16 | // RUN: -isystem Inputs/macro-ambiguity/b/system \ |
17 | // RUN: -fno-implicit-modules \ |
18 | // RUN: -fmodule-map-file-home-is-cwd \ |
19 | // RUN: -emit-module -fmodule-name=b -o %t/b.pcm \ |
20 | // RUN: Inputs/macro-ambiguity/module.modulemap |
21 | // |
22 | // RUN: %clang_cc1 -fmodules -x c++ -fmodules-cache-path=%t \ |
23 | // RUN: -v \ |
24 | // RUN: -iquote Inputs/macro-ambiguity/c/quote \ |
25 | // RUN: -isystem Inputs/macro-ambiguity/c/system \ |
26 | // RUN: -fno-implicit-modules \ |
27 | // RUN: -fmodule-map-file-home-is-cwd \ |
28 | // RUN: -emit-module -fmodule-name=c -o %t/c.pcm \ |
29 | // RUN: Inputs/macro-ambiguity/module.modulemap |
30 | // |
31 | // RUN: %clang_cc1 -fmodules -x c++ -fmodules-cache-path=%t \ |
32 | // RUN: -v \ |
33 | // RUN: -iquote Inputs/macro-ambiguity/d/quote \ |
34 | // RUN: -isystem Inputs/macro-ambiguity/d/system \ |
35 | // RUN: -fno-implicit-modules \ |
36 | // RUN: -fmodule-map-file-home-is-cwd \ |
37 | // RUN: -emit-module -fmodule-name=d -o %t/d.pcm \ |
38 | // RUN: Inputs/macro-ambiguity/module.modulemap |
39 | // |
40 | // RUN: %clang_cc1 -fmodules -x c++ -fmodules-cache-path=%t \ |
41 | // RUN: -v \ |
42 | // RUN: -iquote Inputs/macro-ambiguity/a/quote \ |
43 | // RUN: -isystem Inputs/macro-ambiguity/a/system \ |
44 | // RUN: -iquote Inputs/macro-ambiguity/b/quote \ |
45 | // RUN: -isystem Inputs/macro-ambiguity/b/system \ |
46 | // RUN: -iquote Inputs/macro-ambiguity/c/quote \ |
47 | // RUN: -isystem Inputs/macro-ambiguity/c/system \ |
48 | // RUN: -iquote Inputs/macro-ambiguity/d/quote \ |
49 | // RUN: -isystem Inputs/macro-ambiguity/d/system \ |
50 | // RUN: -iquote Inputs/macro-ambiguity/e/quote \ |
51 | // RUN: -isystem Inputs/macro-ambiguity/e/system \ |
52 | // RUN: -fno-implicit-modules \ |
53 | // RUN: -fmodule-map-file-home-is-cwd \ |
54 | // RUN: -fmodule-map-file=Inputs/macro-ambiguity/module.modulemap \ |
55 | // RUN: -fmodule-file=%t/a.pcm \ |
56 | // RUN: -fmodule-file=%t/b.pcm \ |
57 | // RUN: -fmodule-file=%t/c.pcm \ |
58 | // RUN: -fmodule-file=%t/d.pcm \ |
59 | // RUN: -Wambiguous-macro -verify macro-ambiguity.cpp |
60 | // |
61 | // RUN: %clang_cc1 -fmodules -x c++ -fmodules-cache-path=%t \ |
62 | // RUN: -v -fmodules-local-submodule-visibility \ |
63 | // RUN: -iquote Inputs/macro-ambiguity/a/quote \ |
64 | // RUN: -isystem Inputs/macro-ambiguity/a/system \ |
65 | // RUN: -iquote Inputs/macro-ambiguity/b/quote \ |
66 | // RUN: -isystem Inputs/macro-ambiguity/b/system \ |
67 | // RUN: -iquote Inputs/macro-ambiguity/c/quote \ |
68 | // RUN: -isystem Inputs/macro-ambiguity/c/system \ |
69 | // RUN: -iquote Inputs/macro-ambiguity/d/quote \ |
70 | // RUN: -isystem Inputs/macro-ambiguity/d/system \ |
71 | // RUN: -iquote Inputs/macro-ambiguity/e/quote \ |
72 | // RUN: -isystem Inputs/macro-ambiguity/e/system \ |
73 | // RUN: -fno-implicit-modules \ |
74 | // RUN: -fmodule-map-file-home-is-cwd \ |
75 | // RUN: -fmodule-map-file=Inputs/macro-ambiguity/module.modulemap \ |
76 | // RUN: -fmodule-file=%t/a.pcm \ |
77 | // RUN: -fmodule-file=%t/b.pcm \ |
78 | // RUN: -fmodule-file=%t/c.pcm \ |
79 | // RUN: -fmodule-file=%t/d.pcm \ |
80 | // RUN: -Wambiguous-macro -verify macro-ambiguity.cpp |
81 | |
82 | // Include the textual headers first to maximize the ways in which things can |
83 | // become ambiguous. |
84 | #include "e_quote.h" |
85 | #include <e_system.h> |
86 | |
87 | #include "a_quote.h" |
88 | #include <a_system.h> |
89 | #include "b_quote.h" |
90 | #include <b_system.h> |
91 | #include "c_quote.h" |
92 | #include <c_system.h> |
93 | #include "d_quote.h" |
94 | #include <d_system.h> |
95 | |
96 | int test(int x) { |
97 | // We expect to get warnings for all of the quoted includes but none of the |
98 | // system includes here because the first module is a non-system module and |
99 | // the quote macros come from non-system-headers. |
100 | x = FOO1_QUOTE(x); // expected-warning {{ambiguous expansion of macro}} |
101 | // expected-note@Inputs/macro-ambiguity/c/quote/c_quote.h:4 {{expanding this definition}} |
102 | // expected-note@Inputs/macro-ambiguity/a/quote/a_quote.h:4 {{other definition}} |
103 | |
104 | x = FOO1_SYSTEM(x); |
105 | |
106 | x = BAR1_QUOTE(x); // expected-warning {{ambiguous expansion of macro}} |
107 | // expected-note@Inputs/macro-ambiguity/d/quote/d_quote.h:4 {{expanding this definition}} |
108 | // expected-note@Inputs/macro-ambiguity/a/quote/a_quote.h:5 {{other definition}} |
109 | |
110 | x = BAR1_SYSTEM(x); |
111 | |
112 | x = BAZ1_QUOTE(x); // expected-warning {{ambiguous expansion of macro}} |
113 | // expected-note@Inputs/macro-ambiguity/a/quote/a_quote.h:6 {{expanding this definition}} |
114 | // expected-note@Inputs/macro-ambiguity/e/quote/e_quote.h:4 {{other definition}} |
115 | |
116 | x = BAZ1_SYSTEM(x); |
117 | |
118 | // Here, we don't even warn on bar because in that cas both b and d are |
119 | // system modules and so the use of non-system headers is irrelevant. |
120 | x = FOO2_QUOTE(x); // expected-warning {{ambiguous expansion of macro}} |
121 | // expected-note@Inputs/macro-ambiguity/c/quote/c_quote.h:5 {{expanding this definition}} |
122 | // expected-note@Inputs/macro-ambiguity/b/quote/b_quote.h:4 {{other definition}} |
123 | |
124 | x = FOO2_SYSTEM(x); |
125 | |
126 | x = BAR2_QUOTE(x); |
127 | |
128 | x = BAR2_SYSTEM(x); |
129 | |
130 | x = BAZ2_QUOTE(x); // expected-warning {{ambiguous expansion of macro}} |
131 | // expected-note@Inputs/macro-ambiguity/b/quote/b_quote.h:6 {{expanding this definition}} |
132 | // expected-note@Inputs/macro-ambiguity/e/quote/e_quote.h:5 {{other definition}} |
133 | |
134 | x = BAZ2_SYSTEM(x); |
135 | return x; |
136 | } |
137 | |