1 // RUN: rm -rf %t 2 // RUN: mkdir -p %t 3 // RUN: split-file %s %t 4 // RUN: %clang_cc1 -std=c++20 %t/impl.cppm -emit-module-interface -o %t/M-impl.pcm 5 // RUN: %clang_cc1 -std=c++20 %t/M.cppm -emit-module-interface -fprebuilt-module-path=%t -o %t/M.pcm 6 // RUN: %clang_cc1 -std=c++20 %t/Use.cpp -fprebuilt-module-path=%t -verify -fsyntax-only 7 // RUN: %clang_cc1 -std=c++20 %t/UseInPartA.cppm -fprebuilt-module-path=%t -verify -fsyntax-only 8 // RUN: %clang_cc1 -std=c++20 %t/UseInAnotherModule.cppm -fprebuilt-module-path=%t -verify -fsyntax-only 9 // RUN: %clang_cc1 -std=c++20 %t/Private.cppm -emit-module-interface -fprebuilt-module-path=%t -o %t/A.pcm 10 // RUN: %clang_cc1 -std=c++20 %t/TryUseFromPrivate.cpp -fprebuilt-module-path=%t -verify -fsyntax-only 11 // RUN: %clang_cc1 -std=c++20 %t/Global.cppm -emit-module-interface -fprebuilt-module-path=%t -o %t/C.pcm 12 // RUN: %clang_cc1 -std=c++20 %t/UseGlobal.cpp -fprebuilt-module-path=%t -verify -fsyntax-only 13 14 //--- impl.cppm 15 module M:impl; 16 class A {}; 17 18 //--- M.cppm 19 export module M; 20 import :impl; 21 export A f(); 22 23 //--- Use.cpp 24 import M; 25 void test() { 26 A a; // expected-error {{unknown type name 'A'}} 27 } 28 29 //--- UseInPartA.cppm 30 export module M:partA; 31 import :impl; // expected-warning {{importing an implementation partition unit in a module interface is not recommended.}} 32 void test() { 33 A a; 34 } 35 36 //--- UseInAnotherModule.cppm 37 export module B; 38 import M; 39 void test() { 40 A a; // expected-error {{unknown type name 'A'}} 41 } 42 43 //--- Private.cppm 44 export module A; 45 module :private; 46 47 class A {}; 48 void test() { 49 A a; 50 } 51 52 //--- TryUseFromPrivate.cpp 53 54 import A; 55 void test() { 56 A a; // expected-error {{unknown type name 'A'}} 57 } 58 59 //--- Global.cppm 60 module; 61 class A{}; 62 export module C; 63 void test() { 64 A a; 65 } 66 67 //--- UseGlobal.cpp 68 import C; 69 void test() { 70 A a; // expected-error {{'A' must be declared before it is used}} 71 // expected-note@Global.cppm:2 {{declaration here is not visible}} 72 } 73