xref: /llvm-project/clang/test/Modules/implicit-module-header-maps.cpp (revision bf916aeebd8c96c0618a1ccbb01a1517710f8766)
1f8536fb1SIvan Murashko // UNSUPPORTED: system-windows
2f8536fb1SIvan Murashko // RUN: rm -rf %t
3f8536fb1SIvan Murashko // RUN: split-file %s %t
4f8536fb1SIvan Murashko // RUN: cd %t
5f8536fb1SIvan Murashko //
6f8536fb1SIvan Murashko // RUN: %hmaptool write a.hmap.json hmap
7f8536fb1SIvan Murashko //
8f8536fb1SIvan Murashko // RUN: %clang -Rmodule-build -fmodules -fimplicit-modules -fimplicit-module-maps -fmodule-map-file=module.modulemap -fsyntax-only -I hmap -fmodules-cache-path=%t test.cpp
9f8536fb1SIvan Murashko //
10*bf916aeeSHaojian Wu // RUN: cd %T
11f8536fb1SIvan Murashko // RUN: rm -rf %t
12f8536fb1SIvan Murashko // RUN: split-file %s %t
13f8536fb1SIvan Murashko // RUN: cd %t
14f8536fb1SIvan Murashko //
15f8536fb1SIvan Murashko // RUN: sed -e "s|OUTPUTS_DIR|%t|g" b.hmap.json > hmap.json
16f8536fb1SIvan Murashko // RUN: %hmaptool write hmap.json hmap
17f8536fb1SIvan Murashko //
18f8536fb1SIvan Murashko // RUN: %clang -Rmodule-build -fmodules -fimplicit-modules -fimplicit-module-maps -fmodule-map-file=module.modulemap -fsyntax-only -I hmap -fmodules-cache-path=%t test.cpp
19f8536fb1SIvan Murashko 
20f8536fb1SIvan Murashko //--- After/Mapping.h
21f8536fb1SIvan Murashko #ifdef FOO
22f8536fb1SIvan Murashko #error foo
23f8536fb1SIvan Murashko #endif
24f8536fb1SIvan Murashko 
25f8536fb1SIvan Murashko //--- a.hmap.json
26f8536fb1SIvan Murashko {
27f8536fb1SIvan Murashko   "mappings" :
28f8536fb1SIvan Murashko     {
29f8536fb1SIvan Murashko      "Before/Mapping.h" : "After/Mapping.h",
30f8536fb1SIvan Murashko      "After/Mapping.h" : "After/Mapping.h"
31f8536fb1SIvan Murashko     }
32f8536fb1SIvan Murashko }
33f8536fb1SIvan Murashko 
34f8536fb1SIvan Murashko //--- b.hmap.json
35f8536fb1SIvan Murashko {
36f8536fb1SIvan Murashko   "mappings" :
37f8536fb1SIvan Murashko     {
38f8536fb1SIvan Murashko      "Before/Mapping.h" : "OUTPUTS_DIR/After/Mapping.h"
39f8536fb1SIvan Murashko     }
40f8536fb1SIvan Murashko }
41f8536fb1SIvan Murashko 
42f8536fb1SIvan Murashko //--- module.modulemap
43f8536fb1SIvan Murashko module a {
44f8536fb1SIvan Murashko   header "After/Mapping.h"
45f8536fb1SIvan Murashko }
46f8536fb1SIvan Murashko 
47f8536fb1SIvan Murashko 
48f8536fb1SIvan Murashko //--- test.cpp
49f8536fb1SIvan Murashko #define FOO
50f8536fb1SIvan Murashko // This include will fail if:
51f8536fb1SIvan Murashko // 1) modules are't used, as the `FOO` define will propagate into the included
52f8536fb1SIvan Murashko //    header and trip a `#error`, or
53f8536fb1SIvan Murashko // 2) header maps aren't used, as the header name doesn't exist and relies on
54f8536fb1SIvan Murashko //    the header map to remap it to the real header.
55f8536fb1SIvan Murashko #include "Before/Mapping.h"
56