1d6509cf2SRichard Smith // RUN: %clang_cc1 -fmodules-ts -fmodule-name=ab -x c++-header %S/Inputs/no-module-map/a.h %S/Inputs/no-module-map/b.h -emit-header-module -o %t.pcm
2d6509cf2SRichard Smith // RUN: %clang_cc1 -fmodules-ts -fmodule-file=%t.pcm %s -I%S/Inputs/no-module-map -verify
3d6509cf2SRichard Smith // RUN: %clang_cc1 -fmodules-ts -fmodule-file=%t.pcm %s -I%S/Inputs/no-module-map -verify -DA
4d6509cf2SRichard Smith // RUN: %clang_cc1 -fmodules-ts -fmodule-file=%t.pcm %s -I%S/Inputs/no-module-map -verify -DB
5d6509cf2SRichard Smith // RUN: %clang_cc1 -fmodules-ts -fmodule-file=%t.pcm %s -I%S/Inputs/no-module-map -verify -DA -DB
6d6509cf2SRichard Smith 
78b464f29SRichard Smith // RUN: %clang_cc1 -E %t.pcm -o - | FileCheck %s
88b464f29SRichard Smith // RUN: %clang_cc1 -frewrite-imports -E %t.pcm -o - | FileCheck %s
98b464f29SRichard Smith // CHECK: # {{.*}}a.h
108b464f29SRichard Smith // CHECK: # {{.*}}b.h
118b464f29SRichard Smith 
12d6509cf2SRichard Smith #ifdef B
13d6509cf2SRichard Smith // expected-no-diagnostics
14d6509cf2SRichard Smith #endif
15d6509cf2SRichard Smith 
16d6509cf2SRichard Smith #ifdef A
17d6509cf2SRichard Smith #include "a.h"
18d6509cf2SRichard Smith #endif
19d6509cf2SRichard Smith 
20d6509cf2SRichard Smith #ifdef B
21d6509cf2SRichard Smith #include "b.h"
22d6509cf2SRichard Smith #endif
23d6509cf2SRichard Smith 
24d6509cf2SRichard Smith #if defined(A) || defined(B)
25d6509cf2SRichard Smith #ifndef A_H
26d6509cf2SRichard Smith #error A_H should be defined
27d6509cf2SRichard Smith #endif
28d6509cf2SRichard Smith #else
29d6509cf2SRichard Smith #ifdef A_H
30d6509cf2SRichard Smith #error A_H should not be defined
31d6509cf2SRichard Smith #endif
32d6509cf2SRichard Smith // expected-error@+3 {{must be imported from}}
33*0a088eadSRichard Smith // expected-note@* {{declaration}}
34d6509cf2SRichard Smith #endif
use_a()35d6509cf2SRichard Smith void use_a() { a(); }
36d6509cf2SRichard Smith 
37d6509cf2SRichard Smith #if defined(B)
38d6509cf2SRichard Smith #ifndef B_H
39d6509cf2SRichard Smith #error B_H should be defined
40d6509cf2SRichard Smith #endif
41d6509cf2SRichard Smith #else
42d6509cf2SRichard Smith #ifdef B_H
43d6509cf2SRichard Smith #error B_H should not be defined
44d6509cf2SRichard Smith #endif
45d6509cf2SRichard Smith // expected-error@+3 {{must be imported from}}
46*0a088eadSRichard Smith // expected-note@* {{declaration}}
47d6509cf2SRichard Smith #endif
use_b()48d6509cf2SRichard Smith void use_b() { b(); }
49