13ea9e33ea25e0c2b12db56418ba3f994eb662c04Pirama Arumuga Nainar// RUN: rm -rf %t
23ea9e33ea25e0c2b12db56418ba3f994eb662c04Pirama Arumuga Nainar// RUN: cd %S
33ea9e33ea25e0c2b12db56418ba3f994eb662c04Pirama Arumuga Nainar//
43ea9e33ea25e0c2b12db56418ba3f994eb662c04Pirama Arumuga Nainar// RUN: %clang_cc1 -fmodules -x c++ -fmodules-cache-path=%t \
53ea9e33ea25e0c2b12db56418ba3f994eb662c04Pirama Arumuga Nainar// RUN:   -v \
63ea9e33ea25e0c2b12db56418ba3f994eb662c04Pirama Arumuga Nainar// RUN:   -iquote Inputs/macro-ambiguity/a/quote \
73ea9e33ea25e0c2b12db56418ba3f994eb662c04Pirama Arumuga Nainar// RUN:   -isystem Inputs/macro-ambiguity/a/system \
8a4de17562d13d7a8188108243c4cfbd52f33229aPirama Arumuga Nainar// RUN:   -fno-implicit-modules \
93ea9e33ea25e0c2b12db56418ba3f994eb662c04Pirama Arumuga Nainar// RUN:   -fmodule-map-file-home-is-cwd \
103ea9e33ea25e0c2b12db56418ba3f994eb662c04Pirama Arumuga Nainar// RUN:   -emit-module -fmodule-name=a -o %t/a.pcm \
113ea9e33ea25e0c2b12db56418ba3f994eb662c04Pirama Arumuga Nainar// RUN:   Inputs/macro-ambiguity/module.modulemap
123ea9e33ea25e0c2b12db56418ba3f994eb662c04Pirama Arumuga Nainar//
133ea9e33ea25e0c2b12db56418ba3f994eb662c04Pirama Arumuga Nainar// RUN: %clang_cc1 -fmodules -x c++ -fmodules-cache-path=%t \
143ea9e33ea25e0c2b12db56418ba3f994eb662c04Pirama Arumuga Nainar// RUN:   -v \
153ea9e33ea25e0c2b12db56418ba3f994eb662c04Pirama Arumuga Nainar// RUN:   -iquote Inputs/macro-ambiguity/b/quote \
163ea9e33ea25e0c2b12db56418ba3f994eb662c04Pirama Arumuga Nainar// RUN:   -isystem Inputs/macro-ambiguity/b/system \
17a4de17562d13d7a8188108243c4cfbd52f33229aPirama Arumuga Nainar// RUN:   -fno-implicit-modules \
183ea9e33ea25e0c2b12db56418ba3f994eb662c04Pirama Arumuga Nainar// RUN:   -fmodule-map-file-home-is-cwd \
193ea9e33ea25e0c2b12db56418ba3f994eb662c04Pirama Arumuga Nainar// RUN:   -emit-module -fmodule-name=b -o %t/b.pcm \
203ea9e33ea25e0c2b12db56418ba3f994eb662c04Pirama Arumuga Nainar// RUN:   Inputs/macro-ambiguity/module.modulemap
213ea9e33ea25e0c2b12db56418ba3f994eb662c04Pirama Arumuga Nainar//
223ea9e33ea25e0c2b12db56418ba3f994eb662c04Pirama Arumuga Nainar// RUN: %clang_cc1 -fmodules -x c++ -fmodules-cache-path=%t \
233ea9e33ea25e0c2b12db56418ba3f994eb662c04Pirama Arumuga Nainar// RUN:   -v \
243ea9e33ea25e0c2b12db56418ba3f994eb662c04Pirama Arumuga Nainar// RUN:   -iquote Inputs/macro-ambiguity/c/quote \
253ea9e33ea25e0c2b12db56418ba3f994eb662c04Pirama Arumuga Nainar// RUN:   -isystem Inputs/macro-ambiguity/c/system \
26a4de17562d13d7a8188108243c4cfbd52f33229aPirama Arumuga Nainar// RUN:   -fno-implicit-modules \
273ea9e33ea25e0c2b12db56418ba3f994eb662c04Pirama Arumuga Nainar// RUN:   -fmodule-map-file-home-is-cwd \
283ea9e33ea25e0c2b12db56418ba3f994eb662c04Pirama Arumuga Nainar// RUN:   -emit-module -fmodule-name=c -o %t/c.pcm \
293ea9e33ea25e0c2b12db56418ba3f994eb662c04Pirama Arumuga Nainar// RUN:   Inputs/macro-ambiguity/module.modulemap
303ea9e33ea25e0c2b12db56418ba3f994eb662c04Pirama Arumuga Nainar//
313ea9e33ea25e0c2b12db56418ba3f994eb662c04Pirama Arumuga Nainar// RUN: %clang_cc1 -fmodules -x c++ -fmodules-cache-path=%t \
323ea9e33ea25e0c2b12db56418ba3f994eb662c04Pirama Arumuga Nainar// RUN:   -v \
333ea9e33ea25e0c2b12db56418ba3f994eb662c04Pirama Arumuga Nainar// RUN:   -iquote Inputs/macro-ambiguity/d/quote \
343ea9e33ea25e0c2b12db56418ba3f994eb662c04Pirama Arumuga Nainar// RUN:   -isystem Inputs/macro-ambiguity/d/system \
35a4de17562d13d7a8188108243c4cfbd52f33229aPirama Arumuga Nainar// RUN:   -fno-implicit-modules \
363ea9e33ea25e0c2b12db56418ba3f994eb662c04Pirama Arumuga Nainar// RUN:   -fmodule-map-file-home-is-cwd \
373ea9e33ea25e0c2b12db56418ba3f994eb662c04Pirama Arumuga Nainar// RUN:   -emit-module -fmodule-name=d -o %t/d.pcm \
383ea9e33ea25e0c2b12db56418ba3f994eb662c04Pirama Arumuga Nainar// RUN:   Inputs/macro-ambiguity/module.modulemap
393ea9e33ea25e0c2b12db56418ba3f994eb662c04Pirama Arumuga Nainar//
403ea9e33ea25e0c2b12db56418ba3f994eb662c04Pirama Arumuga Nainar// RUN: %clang_cc1 -fmodules -x c++ -fmodules-cache-path=%t \
413ea9e33ea25e0c2b12db56418ba3f994eb662c04Pirama Arumuga Nainar// RUN:   -v \
423ea9e33ea25e0c2b12db56418ba3f994eb662c04Pirama Arumuga Nainar// RUN:   -iquote Inputs/macro-ambiguity/a/quote \
433ea9e33ea25e0c2b12db56418ba3f994eb662c04Pirama Arumuga Nainar// RUN:   -isystem Inputs/macro-ambiguity/a/system \
443ea9e33ea25e0c2b12db56418ba3f994eb662c04Pirama Arumuga Nainar// RUN:   -iquote Inputs/macro-ambiguity/b/quote \
453ea9e33ea25e0c2b12db56418ba3f994eb662c04Pirama Arumuga Nainar// RUN:   -isystem Inputs/macro-ambiguity/b/system \
463ea9e33ea25e0c2b12db56418ba3f994eb662c04Pirama Arumuga Nainar// RUN:   -iquote Inputs/macro-ambiguity/c/quote \
473ea9e33ea25e0c2b12db56418ba3f994eb662c04Pirama Arumuga Nainar// RUN:   -isystem Inputs/macro-ambiguity/c/system \
483ea9e33ea25e0c2b12db56418ba3f994eb662c04Pirama Arumuga Nainar// RUN:   -iquote Inputs/macro-ambiguity/d/quote \
493ea9e33ea25e0c2b12db56418ba3f994eb662c04Pirama Arumuga Nainar// RUN:   -isystem Inputs/macro-ambiguity/d/system \
503ea9e33ea25e0c2b12db56418ba3f994eb662c04Pirama Arumuga Nainar// RUN:   -iquote Inputs/macro-ambiguity/e/quote \
513ea9e33ea25e0c2b12db56418ba3f994eb662c04Pirama Arumuga Nainar// RUN:   -isystem Inputs/macro-ambiguity/e/system \
52a4de17562d13d7a8188108243c4cfbd52f33229aPirama Arumuga Nainar// RUN:   -fno-implicit-modules \
533ea9e33ea25e0c2b12db56418ba3f994eb662c04Pirama Arumuga Nainar// RUN:   -fmodule-map-file-home-is-cwd \
543ea9e33ea25e0c2b12db56418ba3f994eb662c04Pirama Arumuga Nainar// RUN:   -fmodule-map-file=Inputs/macro-ambiguity/module.modulemap \
553ea9e33ea25e0c2b12db56418ba3f994eb662c04Pirama Arumuga Nainar// RUN:   -fmodule-file=%t/a.pcm \
563ea9e33ea25e0c2b12db56418ba3f994eb662c04Pirama Arumuga Nainar// RUN:   -fmodule-file=%t/b.pcm \
573ea9e33ea25e0c2b12db56418ba3f994eb662c04Pirama Arumuga Nainar// RUN:   -fmodule-file=%t/c.pcm \
583ea9e33ea25e0c2b12db56418ba3f994eb662c04Pirama Arumuga Nainar// RUN:   -fmodule-file=%t/d.pcm \
593ea9e33ea25e0c2b12db56418ba3f994eb662c04Pirama Arumuga Nainar// RUN:   -Wambiguous-macro -verify macro-ambiguity.cpp
60b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga Nainar//
61b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga Nainar// RUN: %clang_cc1 -fmodules -x c++ -fmodules-cache-path=%t \
62b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga Nainar// RUN:   -v -fmodules-local-submodule-visibility \
63b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga Nainar// RUN:   -iquote Inputs/macro-ambiguity/a/quote \
64b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga Nainar// RUN:   -isystem Inputs/macro-ambiguity/a/system \
65b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga Nainar// RUN:   -iquote Inputs/macro-ambiguity/b/quote \
66b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga Nainar// RUN:   -isystem Inputs/macro-ambiguity/b/system \
67b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga Nainar// RUN:   -iquote Inputs/macro-ambiguity/c/quote \
68b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga Nainar// RUN:   -isystem Inputs/macro-ambiguity/c/system \
69b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga Nainar// RUN:   -iquote Inputs/macro-ambiguity/d/quote \
70b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga Nainar// RUN:   -isystem Inputs/macro-ambiguity/d/system \
71b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga Nainar// RUN:   -iquote Inputs/macro-ambiguity/e/quote \
72b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga Nainar// RUN:   -isystem Inputs/macro-ambiguity/e/system \
73a4de17562d13d7a8188108243c4cfbd52f33229aPirama Arumuga Nainar// RUN:   -fno-implicit-modules \
74b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga Nainar// RUN:   -fmodule-map-file-home-is-cwd \
75b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga Nainar// RUN:   -fmodule-map-file=Inputs/macro-ambiguity/module.modulemap \
76b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga Nainar// RUN:   -fmodule-file=%t/a.pcm \
77b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga Nainar// RUN:   -fmodule-file=%t/b.pcm \
78b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga Nainar// RUN:   -fmodule-file=%t/c.pcm \
79b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga Nainar// RUN:   -fmodule-file=%t/d.pcm \
80b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga Nainar// RUN:   -Wambiguous-macro -verify macro-ambiguity.cpp
813ea9e33ea25e0c2b12db56418ba3f994eb662c04Pirama Arumuga Nainar
823ea9e33ea25e0c2b12db56418ba3f994eb662c04Pirama Arumuga Nainar// Include the textual headers first to maximize the ways in which things can
833ea9e33ea25e0c2b12db56418ba3f994eb662c04Pirama Arumuga Nainar// become ambiguous.
843ea9e33ea25e0c2b12db56418ba3f994eb662c04Pirama Arumuga Nainar#include "e_quote.h"
853ea9e33ea25e0c2b12db56418ba3f994eb662c04Pirama Arumuga Nainar#include <e_system.h>
863ea9e33ea25e0c2b12db56418ba3f994eb662c04Pirama Arumuga Nainar
873ea9e33ea25e0c2b12db56418ba3f994eb662c04Pirama Arumuga Nainar#include "a_quote.h"
883ea9e33ea25e0c2b12db56418ba3f994eb662c04Pirama Arumuga Nainar#include <a_system.h>
893ea9e33ea25e0c2b12db56418ba3f994eb662c04Pirama Arumuga Nainar#include "b_quote.h"
903ea9e33ea25e0c2b12db56418ba3f994eb662c04Pirama Arumuga Nainar#include <b_system.h>
913ea9e33ea25e0c2b12db56418ba3f994eb662c04Pirama Arumuga Nainar#include "c_quote.h"
923ea9e33ea25e0c2b12db56418ba3f994eb662c04Pirama Arumuga Nainar#include <c_system.h>
933ea9e33ea25e0c2b12db56418ba3f994eb662c04Pirama Arumuga Nainar#include "d_quote.h"
943ea9e33ea25e0c2b12db56418ba3f994eb662c04Pirama Arumuga Nainar#include <d_system.h>
953ea9e33ea25e0c2b12db56418ba3f994eb662c04Pirama Arumuga Nainar
963ea9e33ea25e0c2b12db56418ba3f994eb662c04Pirama Arumuga Nainarint test(int x) {
973ea9e33ea25e0c2b12db56418ba3f994eb662c04Pirama Arumuga Nainar  // We expect to get warnings for all of the quoted includes but none of the
983ea9e33ea25e0c2b12db56418ba3f994eb662c04Pirama Arumuga Nainar  // system includes here because the first module is a non-system module and
993ea9e33ea25e0c2b12db56418ba3f994eb662c04Pirama Arumuga Nainar  // the quote macros come from non-system-headers.
1003ea9e33ea25e0c2b12db56418ba3f994eb662c04Pirama Arumuga Nainar  x = FOO1_QUOTE(x); // expected-warning {{ambiguous expansion of macro}}
1013ea9e33ea25e0c2b12db56418ba3f994eb662c04Pirama Arumuga Nainar  // expected-note@Inputs/macro-ambiguity/c/quote/c_quote.h:4 {{expanding this definition}}
1023ea9e33ea25e0c2b12db56418ba3f994eb662c04Pirama Arumuga Nainar  // expected-note@Inputs/macro-ambiguity/a/quote/a_quote.h:4 {{other definition}}
1033ea9e33ea25e0c2b12db56418ba3f994eb662c04Pirama Arumuga Nainar
1043ea9e33ea25e0c2b12db56418ba3f994eb662c04Pirama Arumuga Nainar  x = FOO1_SYSTEM(x);
1053ea9e33ea25e0c2b12db56418ba3f994eb662c04Pirama Arumuga Nainar
1063ea9e33ea25e0c2b12db56418ba3f994eb662c04Pirama Arumuga Nainar  x = BAR1_QUOTE(x); // expected-warning {{ambiguous expansion of macro}}
1073ea9e33ea25e0c2b12db56418ba3f994eb662c04Pirama Arumuga Nainar  // expected-note@Inputs/macro-ambiguity/d/quote/d_quote.h:4 {{expanding this definition}}
1083ea9e33ea25e0c2b12db56418ba3f994eb662c04Pirama Arumuga Nainar  // expected-note@Inputs/macro-ambiguity/a/quote/a_quote.h:5 {{other definition}}
1093ea9e33ea25e0c2b12db56418ba3f994eb662c04Pirama Arumuga Nainar
1103ea9e33ea25e0c2b12db56418ba3f994eb662c04Pirama Arumuga Nainar  x = BAR1_SYSTEM(x);
1113ea9e33ea25e0c2b12db56418ba3f994eb662c04Pirama Arumuga Nainar
1123ea9e33ea25e0c2b12db56418ba3f994eb662c04Pirama Arumuga Nainar  x = BAZ1_QUOTE(x); // expected-warning {{ambiguous expansion of macro}}
1133ea9e33ea25e0c2b12db56418ba3f994eb662c04Pirama Arumuga Nainar  // expected-note@Inputs/macro-ambiguity/a/quote/a_quote.h:6 {{expanding this definition}}
1143ea9e33ea25e0c2b12db56418ba3f994eb662c04Pirama Arumuga Nainar  // expected-note@Inputs/macro-ambiguity/e/quote/e_quote.h:4 {{other definition}}
1153ea9e33ea25e0c2b12db56418ba3f994eb662c04Pirama Arumuga Nainar
1163ea9e33ea25e0c2b12db56418ba3f994eb662c04Pirama Arumuga Nainar  x = BAZ1_SYSTEM(x);
1173ea9e33ea25e0c2b12db56418ba3f994eb662c04Pirama Arumuga Nainar
1183ea9e33ea25e0c2b12db56418ba3f994eb662c04Pirama Arumuga Nainar  // Here, we don't even warn on bar because in that cas both b and d are
1193ea9e33ea25e0c2b12db56418ba3f994eb662c04Pirama Arumuga Nainar  // system modules and so the use of non-system headers is irrelevant.
1203ea9e33ea25e0c2b12db56418ba3f994eb662c04Pirama Arumuga Nainar  x = FOO2_QUOTE(x); // expected-warning {{ambiguous expansion of macro}}
1213ea9e33ea25e0c2b12db56418ba3f994eb662c04Pirama Arumuga Nainar  // expected-note@Inputs/macro-ambiguity/c/quote/c_quote.h:5 {{expanding this definition}}
1223ea9e33ea25e0c2b12db56418ba3f994eb662c04Pirama Arumuga Nainar  // expected-note@Inputs/macro-ambiguity/b/quote/b_quote.h:4 {{other definition}}
1233ea9e33ea25e0c2b12db56418ba3f994eb662c04Pirama Arumuga Nainar
1243ea9e33ea25e0c2b12db56418ba3f994eb662c04Pirama Arumuga Nainar  x = FOO2_SYSTEM(x);
1253ea9e33ea25e0c2b12db56418ba3f994eb662c04Pirama Arumuga Nainar
1263ea9e33ea25e0c2b12db56418ba3f994eb662c04Pirama Arumuga Nainar  x = BAR2_QUOTE(x);
1273ea9e33ea25e0c2b12db56418ba3f994eb662c04Pirama Arumuga Nainar
1283ea9e33ea25e0c2b12db56418ba3f994eb662c04Pirama Arumuga Nainar  x = BAR2_SYSTEM(x);
1293ea9e33ea25e0c2b12db56418ba3f994eb662c04Pirama Arumuga Nainar
1303ea9e33ea25e0c2b12db56418ba3f994eb662c04Pirama Arumuga Nainar  x = BAZ2_QUOTE(x); // expected-warning {{ambiguous expansion of macro}}
1313ea9e33ea25e0c2b12db56418ba3f994eb662c04Pirama Arumuga Nainar  // expected-note@Inputs/macro-ambiguity/b/quote/b_quote.h:6 {{expanding this definition}}
1323ea9e33ea25e0c2b12db56418ba3f994eb662c04Pirama Arumuga Nainar  // expected-note@Inputs/macro-ambiguity/e/quote/e_quote.h:5 {{other definition}}
1333ea9e33ea25e0c2b12db56418ba3f994eb662c04Pirama Arumuga Nainar
1343ea9e33ea25e0c2b12db56418ba3f994eb662c04Pirama Arumuga Nainar  x = BAZ2_SYSTEM(x);
1353ea9e33ea25e0c2b12db56418ba3f994eb662c04Pirama Arumuga Nainar  return x;
1363ea9e33ea25e0c2b12db56418ba3f994eb662c04Pirama Arumuga Nainar}
137