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