1 | // RUN: rm -rf %t |
2 | // RUN: %clang_cc1 -fmodules -fmodule-map-file=%S/Inputs/merge-class-definition-visibility/modmap \ |
3 | // RUN: -I%S/Inputs/merge-class-definition-visibility \ |
4 | // RUN: -fmodules-cache-path=%t %s -verify \ |
5 | // RUN: -fmodules-local-submodule-visibility |
6 | // expected-no-diagnostics |
7 | |
8 | #include "c.h" |
9 | template<typename T> struct X { T t; }; |
10 | typedef X<A> XA; |
11 | struct B; |
12 | |
13 | #include "e.h" |
14 | // Ensure that this triggers the import of the second definition from e.h, |
15 | // which is necessary to make the definition of A visible in the template |
16 | // instantiation. |
17 | XA xa; |
18 | |
19 | // Ensure that we make the definition of B visible. We made the parse-merged |
20 | // definition from e.h visible, which makes the definition from d.h visible, |
21 | // and that definition was merged into the canonical definition from b.h, |
22 | // so that becomes visible, and we have a visible definition. |
23 | B b; |
24 | |