| // RUN: %clang_cc1 -fmodules -fmodules-local-submodule-visibility -fno-modules-error-recovery -fno-spell-checking -verify %s |
| |
| #pragma clang module build a |
| module a { explicit module b {} explicit module c {} } |
| #pragma clang module contents |
| |
| #pragma clang module begin a.b |
| namespace b { int n; } |
| #pragma clang module end |
| |
| #pragma clang module begin a.c |
| #pragma clang module import a.b |
| namespace c { using namespace b; } |
| #pragma clang module end |
| |
| #pragma clang module begin a |
| #pragma clang module import a.c |
| using namespace c; |
| #pragma clang module end |
| |
| #pragma clang module endbuild |
| |
| #pragma clang module import a.b |
| void use1() { |
| (void)n; // expected-error {{use of undeclared identifier}} |
| (void)::n; // expected-error {{no member named 'n' in the global namespace}} |
| (void)b::n; |
| } |
| namespace b { |
| void use1_in_b() { (void)n; } |
| } |
| namespace c { |
| void use1_in_c() { (void)n; } // expected-error {{use of undeclared identifier}} |
| } |
| |
| #pragma clang module import a.c |
| void use2() { |
| (void)n; // expected-error {{use of undeclared identifier}} |
| (void)::n; // expected-error {{no member named 'n' in the global namespace}} |
| (void)b::n; |
| (void)c::n; |
| } |
| namespace b { |
| void use2_in_b() { (void)n; } |
| } |
| namespace c { |
| void use2_in_c() { (void)n; } |
| } |
| |
| #pragma clang module import a |
| void use3() { |
| (void)n; |
| (void)::n; |
| (void)b::n; |
| (void)c::n; |
| } |
| namespace b { |
| void use3_in_b() { (void)n; } |
| } |
| namespace c { |
| void use3_in_c() { (void)n; } |
| } |