Richard Smith | beb4478 | 2015-06-20 01:05:19 +0000 | [diff] [blame] | 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 \ |
Richard Smith | 1e02a5a | 2015-06-25 21:42:33 +0000 | [diff] [blame] | 4 | // RUN: -fmodules-cache-path=%t %s -verify \ |
| 5 | // RUN: -fmodules-local-submodule-visibility |
Richard Smith | beb4478 | 2015-06-20 01:05:19 +0000 | [diff] [blame] | 6 | // expected-no-diagnostics |
| 7 | |
| 8 | #include "c.h" |
| 9 | template<typename T> struct X { T t; }; |
| 10 | typedef X<A> XA; |
Richard Smith | 1e02a5a | 2015-06-25 21:42:33 +0000 | [diff] [blame] | 11 | struct B; |
Richard Smith | beb4478 | 2015-06-20 01:05:19 +0000 | [diff] [blame] | 12 | |
Richard Smith | 1e02a5a | 2015-06-25 21:42:33 +0000 | [diff] [blame] | 13 | #include "e.h" |
| 14 | // Ensure that this triggers the import of the second definition from e.h, |
Richard Smith | beb4478 | 2015-06-20 01:05:19 +0000 | [diff] [blame] | 15 | // which is necessary to make the definition of A visible in the template |
| 16 | // instantiation. |
| 17 | XA xa; |
Richard Smith | 1e02a5a | 2015-06-25 21:42:33 +0000 | [diff] [blame] | 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; |