1176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines// RUN: rm -rf %t 20e2c34f92f00628d48968dfea096d36381f494cbStephen Hines// RUN: %clang_cc1 -fsyntax-only -DC1 -I%S/Inputs/macro-reexport %s -fmodules-cache-path=%t -verify 30e2c34f92f00628d48968dfea096d36381f494cbStephen Hines// RUN: %clang_cc1 -fsyntax-only -DC1 -I%S/Inputs/macro-reexport -fmodules %s -fmodules-cache-path=%t -verify 40e2c34f92f00628d48968dfea096d36381f494cbStephen Hines// RUN: %clang_cc1 -fsyntax-only -DD1 -I%S/Inputs/macro-reexport %s -fmodules-cache-path=%t -verify 50e2c34f92f00628d48968dfea096d36381f494cbStephen Hines// RUN: %clang_cc1 -fsyntax-only -DD1 -I%S/Inputs/macro-reexport -fmodules %s -fmodules-cache-path=%t -verify 60e2c34f92f00628d48968dfea096d36381f494cbStephen Hines// RUN: %clang_cc1 -fsyntax-only -DD2 -I%S/Inputs/macro-reexport %s -fmodules-cache-path=%t -verify 70e2c34f92f00628d48968dfea096d36381f494cbStephen Hines// RUN: %clang_cc1 -fsyntax-only -DD2 -I%S/Inputs/macro-reexport -fmodules %s -fmodules-cache-path=%t -verify 80e2c34f92f00628d48968dfea096d36381f494cbStephen Hines// RUN: %clang_cc1 -fsyntax-only -DF1 -I%S/Inputs/macro-reexport %s -fmodules-cache-path=%t -verify 90e2c34f92f00628d48968dfea096d36381f494cbStephen Hines// RUN: %clang_cc1 -fsyntax-only -DF1 -I%S/Inputs/macro-reexport -fmodules %s -fmodules-cache-path=%t -verify 10176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines 11176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines#if defined(F1) 12176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines#include "f1.h" 13176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hinesvoid f() { return assert(true); } // expected-error {{undeclared identifier 'd'}} 14176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines#include "e2.h" // undefines d1's macro 15176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hinesvoid g() { return assert(true); } // expected-error {{undeclared identifier 'assert'}} 16176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines#elif defined(D1) 17176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines#include "e1.h" // undefines c1's macro but not d1's macro 18176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines#include "d1.h" 19176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hinesvoid f() { return assert(true); } // expected-error {{undeclared identifier 'd'}} 20176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines#include "e2.h" // undefines d1's macro 21176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hinesvoid g() { return assert(true); } // expected-error {{undeclared identifier 'assert'}} 22176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines#elif defined(D2) 23176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines#include "d2.h" 24176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hinesvoid f() { return assert(true); } // expected-error {{undeclared identifier 'b'}} 25176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines#else 26176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines// e2 undefines d1's macro, which overrides c1's macro. 27176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines#include "e2.h" 28176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines#include "c1.h" 29176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hinesvoid f() { return assert(true); } // expected-error {{undeclared identifier 'assert'}} 30176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines#endif 31