1 // RUN: rm -rf %t 2 // RUN: %clang_cc1 -fsyntax-only -DC1 -I%S/Inputs/macro-reexport %s -fmodules-cache-path=%t -verify 3 // RUN: %clang_cc1 -fsyntax-only -DC1 -I%S/Inputs/macro-reexport -fmodules %s -fmodules-cache-path=%t -verify 4 // RUN: %clang_cc1 -fsyntax-only -DD1 -I%S/Inputs/macro-reexport %s -fmodules-cache-path=%t -verify 5 // RUN: %clang_cc1 -fsyntax-only -DD1 -I%S/Inputs/macro-reexport -fmodules %s -fmodules-cache-path=%t -verify 6 // RUN: %clang_cc1 -fsyntax-only -DD2 -I%S/Inputs/macro-reexport %s -fmodules-cache-path=%t -verify 7 // RUN: %clang_cc1 -fsyntax-only -DD2 -I%S/Inputs/macro-reexport -fmodules %s -fmodules-cache-path=%t -verify 8 // RUN: %clang_cc1 -fsyntax-only -DF1 -I%S/Inputs/macro-reexport %s -fmodules-cache-path=%t -verify 9 // RUN: %clang_cc1 -fsyntax-only -DF1 -I%S/Inputs/macro-reexport -fmodules %s -fmodules-cache-path=%t -verify 10 11 #if defined(F1) 12 #include "f1.h" 13 void f() { return assert(true); } // expected-error {{undeclared identifier 'd'}} 14 #include "e2.h" // undefines d1's macro 15 void g() { return assert(true); } // expected-error {{undeclared identifier 'assert'}} 16 #elif defined(D1) 17 #include "e1.h" // undefines c1's macro but not d1's macro 18 #include "d1.h" 19 void f() { return assert(true); } // expected-error {{undeclared identifier 'd'}} 20 #include "e2.h" // undefines d1's macro 21 void g() { return assert(true); } // expected-error {{undeclared identifier 'assert'}} 22 #elif defined(D2) 23 #include "d2.h" 24 void f() { return assert(true); } // expected-error {{undeclared identifier 'b'}} 25 #else 26 // e2 undefines d1's macro, which overrides c1's macro. 27 #include "e2.h" 28 #include "c1.h" 29 void f() { return assert(true); } // expected-error {{undeclared identifier 'assert'}} 30 #endif 31