1*f4f62003SRichard Smith // RUN: %clang_cc1 -x c++-module-map -fmodule-name=A -verify %s -fmodules-local-submodule-visibility 2*f4f62003SRichard Smith module A { module B {} module C {} } 3*f4f62003SRichard Smith 4*f4f62003SRichard Smith #pragma clang module contents 5*f4f62003SRichard Smith 6*f4f62003SRichard Smith #pragma clang module begin A.B 7*f4f62003SRichard Smith extern "C++" { 8*f4f62003SRichard Smith #pragma clang module begin A.C 9*f4f62003SRichard Smith template<typename T> void f(T t); 10*f4f62003SRichard Smith #pragma clang module end 11*f4f62003SRichard Smith 12*f4f62003SRichard Smith void g() { f(0); } // ok 13*f4f62003SRichard Smith } 14*f4f62003SRichard Smith 15*f4f62003SRichard Smith extern "C++" { 16*f4f62003SRichard Smith #pragma clang module begin A.C 17*f4f62003SRichard Smith } // expected-error {{extraneous closing brace}} 18*f4f62003SRichard Smith #pragma clang module end 19*f4f62003SRichard Smith 20*f4f62003SRichard Smith #pragma clang module begin A.C 21*f4f62003SRichard Smith extern "C++" { // expected-note {{to match this '{'}} 22*f4f62003SRichard Smith #pragma clang module end // expected-error {{expected '}' at end of module}} 23*f4f62003SRichard Smith } 24*f4f62003SRichard Smith 25*f4f62003SRichard Smith #pragma clang module end 26