// 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; } }