1*49532137SNico Weber // RUN: rm -rf %t 2d8132c30SRaphael Isemann // RUN: %clang_cc1 -x c++ -fmodules -fmodules-local-submodule-visibility -fmodules-cache-path=%t %s -verify 3d8132c30SRaphael Isemann // RUN: %clang_cc1 -x c++ -fmodules -fmodules-cache-path=%t %s -verify 4d8132c30SRaphael Isemann 5d8132c30SRaphael Isemann // expected-no-diagnostics 6d8132c30SRaphael Isemann 7d8132c30SRaphael Isemann #pragma clang module build A 8d8132c30SRaphael Isemann module A { } 9d8132c30SRaphael Isemann #pragma clang module contents 10d8132c30SRaphael Isemann #pragma clang module begin A 11d8132c30SRaphael Isemann struct A { 12d8132c30SRaphael Isemann virtual void Foo(double x) const; 13d8132c30SRaphael Isemann }; 14d8132c30SRaphael Isemann #pragma clang module end 15d8132c30SRaphael Isemann #pragma clang module endbuild 16d8132c30SRaphael Isemann 17d8132c30SRaphael Isemann #pragma clang module build B 18d8132c30SRaphael Isemann module B { } 19d8132c30SRaphael Isemann #pragma clang module contents 20d8132c30SRaphael Isemann #pragma clang module begin B 21d8132c30SRaphael Isemann #pragma clang module import A 22d8132c30SRaphael Isemann struct B : A { 23d8132c30SRaphael Isemann using A::Foo; 24d8132c30SRaphael Isemann virtual void Foo(double x) const; 25d8132c30SRaphael Isemann }; 26d8132c30SRaphael Isemann #pragma clang module end 27d8132c30SRaphael Isemann #pragma clang module endbuild 28d8132c30SRaphael Isemann 29d8132c30SRaphael Isemann #pragma clang module import B 30d8132c30SRaphael Isemann main()31d8132c30SRaphael Isemannint main() { 32d8132c30SRaphael Isemann B b; 33d8132c30SRaphael Isemann b.Foo(1.0); 34d8132c30SRaphael Isemann } 35d8132c30SRaphael Isemann 36