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