1*b920f85dSRichard Smith // RUN: %clang_cc1 -fmodules -fmodules-local-submodule-visibility -fno-modules-error-recovery -fno-spell-checking -verify %s 2*b920f85dSRichard Smith 3*b920f85dSRichard Smith #pragma clang module build a 4*b920f85dSRichard Smith module a { explicit module b {} explicit module c {} } 5*b920f85dSRichard Smith #pragma clang module contents 6*b920f85dSRichard Smith 7*b920f85dSRichard Smith #pragma clang module begin a.b 8*b920f85dSRichard Smith namespace b { int n; } 9*b920f85dSRichard Smith #pragma clang module end 10*b920f85dSRichard Smith 11*b920f85dSRichard Smith #pragma clang module begin a.c 12*b920f85dSRichard Smith #pragma clang module import a.b 13*b920f85dSRichard Smith namespace c { using namespace b; } 14*b920f85dSRichard Smith #pragma clang module end 15*b920f85dSRichard Smith 16*b920f85dSRichard Smith #pragma clang module begin a 17*b920f85dSRichard Smith #pragma clang module import a.c 18*b920f85dSRichard Smith using namespace c; 19*b920f85dSRichard Smith #pragma clang module end 20*b920f85dSRichard Smith 21*b920f85dSRichard Smith #pragma clang module endbuild 22*b920f85dSRichard Smith 23*b920f85dSRichard Smith #pragma clang module import a.b use1()24*b920f85dSRichard Smithvoid use1() { 25*b920f85dSRichard Smith (void)n; // expected-error {{use of undeclared identifier}} 26*b920f85dSRichard Smith (void)::n; // expected-error {{no member named 'n' in the global namespace}} 27*b920f85dSRichard Smith (void)b::n; 28*b920f85dSRichard Smith } 29*b920f85dSRichard Smith namespace b { use1_in_b()30*b920f85dSRichard Smith void use1_in_b() { (void)n; } 31*b920f85dSRichard Smith } 32*b920f85dSRichard Smith namespace c { use1_in_c()33*b920f85dSRichard Smith void use1_in_c() { (void)n; } // expected-error {{use of undeclared identifier}} 34*b920f85dSRichard Smith } 35*b920f85dSRichard Smith 36*b920f85dSRichard Smith #pragma clang module import a.c use2()37*b920f85dSRichard Smithvoid use2() { 38*b920f85dSRichard Smith (void)n; // expected-error {{use of undeclared identifier}} 39*b920f85dSRichard Smith (void)::n; // expected-error {{no member named 'n' in the global namespace}} 40*b920f85dSRichard Smith (void)b::n; 41*b920f85dSRichard Smith (void)c::n; 42*b920f85dSRichard Smith } 43*b920f85dSRichard Smith namespace b { use2_in_b()44*b920f85dSRichard Smith void use2_in_b() { (void)n; } 45*b920f85dSRichard Smith } 46*b920f85dSRichard Smith namespace c { use2_in_c()47*b920f85dSRichard Smith void use2_in_c() { (void)n; } 48*b920f85dSRichard Smith } 49*b920f85dSRichard Smith 50*b920f85dSRichard Smith #pragma clang module import a use3()51*b920f85dSRichard Smithvoid use3() { 52*b920f85dSRichard Smith (void)n; 53*b920f85dSRichard Smith (void)::n; 54*b920f85dSRichard Smith (void)b::n; 55*b920f85dSRichard Smith (void)c::n; 56*b920f85dSRichard Smith } 57*b920f85dSRichard Smith namespace b { use3_in_b()58*b920f85dSRichard Smith void use3_in_b() { (void)n; } 59*b920f85dSRichard Smith } 60*b920f85dSRichard Smith namespace c { use3_in_c()61*b920f85dSRichard Smith void use3_in_c() { (void)n; } 62*b920f85dSRichard Smith } 63