xref: /llvm-project/clang/test/Modules/using-decl-inheritance.cpp (revision 49532137d087d8053789d18540c5e7916b91ef30)
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 Isemann int main() {
32d8132c30SRaphael Isemann   B b;
33d8132c30SRaphael Isemann   b.Foo(1.0);
34d8132c30SRaphael Isemann }
35d8132c30SRaphael Isemann 
36