|  | // RUN: rm -rf %t | 
|  | // RUN: mkdir -p %t | 
|  | // RUN: split-file %s %t | 
|  |  | 
|  | // RUN: %clang_cc1 -std=c++20 -emit-module-interface %t/import-diags-tu1.cpp \ | 
|  | // RUN:  -o %t/B.pcm | 
|  |  | 
|  | // RUN: %clang_cc1 -std=c++20 -emit-module-interface %t/import-diags-tu2.cpp \ | 
|  | // RUN:  -o %t/C.pcm | 
|  |  | 
|  | // RUN: %clang_cc1 -std=c++20 -emit-module-interface %t/import-diags-tu3.cpp \ | 
|  | // RUN:  -fmodule-file=B=%t/B.pcm -fmodule-file=C=%t/C.pcm -o %t/AOK1.pcm | 
|  |  | 
|  | // RUN: %clang_cc1 -std=c++20 -S %t/import-diags-tu4.cpp \ | 
|  | // RUN:  -fmodule-file=AOK1=%t/AOK1.pcm -fmodule-file=B=%t/B.pcm \ | 
|  | // RUN:  -fmodule-file=C=%t/C.pcm -o %t/tu_3.s -verify | 
|  |  | 
|  | // RUN: %clang_cc1 -std=c++20 -emit-module-interface %t/import-diags-tu5.cpp \ | 
|  | // RUN:  -fmodule-file=B=%t/B.pcm -fmodule-file=C=%t/C.pcm -o %t/BC.pcm -verify | 
|  |  | 
|  | // RUN: %clang_cc1 -std=c++20 -S %t/import-diags-tu6.cpp \ | 
|  | // RUN:  -fmodule-file=B=%t/B.pcm -fmodule-file=C=%t/C.pcm -o %t/tu_5.s -verify | 
|  |  | 
|  | // RUN: %clang_cc1 -std=c++20 -emit-module-interface %t/import-diags-tu7.cpp \ | 
|  | // RUN:  -fmodule-file=B=%t/B.pcm -o %t/D.pcm -verify | 
|  |  | 
|  | // RUN: %clang_cc1 -std=c++20 -emit-module-interface %t/import-diags-tu8.cpp \ | 
|  | // RUN:  -fmodule-file=B=%t/B.pcm -o %t/D.pcm -verify | 
|  |  | 
|  | // RUN: %clang_cc1 -std=c++20 -S %t/import-diags-tu9.cpp \ | 
|  | // RUN:  -fmodule-file=B=%t/B.pcm -o %t/tu_8.s -verify | 
|  |  | 
|  | // RUN: %clang_cc1 -std=c++20 -emit-module-interface %t/import-diags-tu10.cpp \ | 
|  | // RUN:  -o %t/B.pcm -verify | 
|  |  | 
|  | // RUN: %clang_cc1 -std=c++20 -emit-obj %t/import-diags-tu11.cpp \ | 
|  | // RUN:  -fmodule-file=C=%t/C.pcm  -o %t/impl.o | 
|  |  | 
|  | // Test diagnostics for incorrect module import sequences. | 
|  |  | 
|  | //--- import-diags-tu1.cpp | 
|  |  | 
|  | export module B; | 
|  |  | 
|  | int foo (); | 
|  |  | 
|  | // expected-no-diagnostics | 
|  |  | 
|  | //--- import-diags-tu2.cpp | 
|  |  | 
|  | export module C; | 
|  |  | 
|  | int bar (); | 
|  |  | 
|  | // expected-no-diagnostics | 
|  |  | 
|  | //--- import-diags-tu3.cpp | 
|  |  | 
|  | export module AOK1; | 
|  |  | 
|  | import B; | 
|  | export import C; | 
|  |  | 
|  | export int theAnswer (); | 
|  |  | 
|  | // expected-no-diagnostics | 
|  |  | 
|  | //--- import-diags-tu4.cpp | 
|  |  | 
|  | module; | 
|  |  | 
|  | module AOK1; | 
|  |  | 
|  | export import C; // expected-error {{export declaration can only be used within a module purview}} | 
|  |  | 
|  | int theAnswer () { return 42; } | 
|  |  | 
|  | //--- import-diags-tu5.cpp | 
|  |  | 
|  | export module BC; | 
|  |  | 
|  | export import B; | 
|  |  | 
|  | int foo () { return 10; } | 
|  |  | 
|  | import C; // expected-error {{imports must immediately follow the module declaration}} | 
|  |  | 
|  | //--- import-diags-tu6.cpp | 
|  |  | 
|  | module B; // implicitly imports B. | 
|  |  | 
|  | int foo () { return 10; } | 
|  |  | 
|  | import C; // expected-error {{imports must immediately follow the module declaration}} | 
|  |  | 
|  | //--- import-diags-tu7.cpp | 
|  |  | 
|  | module; | 
|  | // We can only have preprocessor directives here, which permits | 
|  | // header units (include-translated or not) and named modules. | 
|  | import B; | 
|  | export module D; | 
|  |  | 
|  | int delta (); | 
|  | // expected-no-diagnostics | 
|  |  | 
|  | //--- import-diags-tu8.cpp | 
|  |  | 
|  | export module D; | 
|  |  | 
|  | int delta (); | 
|  |  | 
|  | module :private; | 
|  |  | 
|  | import B; // expected-error {{imports must immediately follow the module declaration}} | 
|  |  | 
|  | //--- import-diags-tu9.cpp | 
|  |  | 
|  | module B; | 
|  |  | 
|  | import B; // expected-error {{import of module 'B' appears within its own implementation}} | 
|  |  | 
|  | //--- import-diags-tu10.cpp | 
|  |  | 
|  | export module B; | 
|  |  | 
|  | import B; // expected-error {{import of module 'B' appears within its own interface}} | 
|  |  | 
|  | //--- import-diags-tu11.cpp | 
|  |  | 
|  | int x; | 
|  |  | 
|  | import C; | 
|  |  | 
|  | int baz() { return 6174; } | 
|  |  | 
|  | // expected-no-diagnostics |