3 // RUN: split-file %s %t
5 // RUN: %clang_cc1 -std=c++20 -emit-module-interface %t/import-diags-tu1.cpp \
8 // RUN: %clang_cc1 -std=c++20 -emit-module-interface %t/import-diags-tu2.cpp \
11 // RUN: %clang_cc1 -std=c++20 -emit-module-interface %t/import-diags-tu3.cpp \
12 // RUN: -fmodule-file=B=%t/B.pcm -fmodule-file=C=%t/C.pcm -o %t/AOK1.pcm
14 // RUN: %clang_cc1 -std=c++20 -S %t/import-diags-tu4.cpp \
15 // RUN: -fmodule-file=AOK1=%t/AOK1.pcm -fmodule-file=B=%t/B.pcm \
16 // RUN: -fmodule-file=C=%t/C.pcm -o %t/tu_3.s -verify
18 // RUN: %clang_cc1 -std=c++20 -emit-module-interface %t/import-diags-tu5.cpp \
19 // RUN: -fmodule-file=B=%t/B.pcm -fmodule-file=C=%t/C.pcm -o %t/BC.pcm -verify
21 // RUN: %clang_cc1 -std=c++20 -S %t/import-diags-tu6.cpp \
22 // RUN: -fmodule-file=B=%t/B.pcm -fmodule-file=C=%t/C.pcm -o %t/tu_5.s -verify
24 // RUN: %clang_cc1 -std=c++20 -emit-module-interface %t/import-diags-tu7.cpp \
25 // RUN: -fmodule-file=B=%t/B.pcm -o %t/D.pcm -verify
27 // RUN: %clang_cc1 -std=c++20 -emit-module-interface %t/import-diags-tu8.cpp \
28 // RUN: -fmodule-file=B=%t/B.pcm -o %t/D.pcm -verify
30 // RUN: %clang_cc1 -std=c++20 -S %t/import-diags-tu9.cpp \
31 // RUN: -fmodule-file=B=%t/B.pcm -o %t/tu_8.s -verify
33 // RUN: %clang_cc1 -std=c++20 -emit-module-interface %t/import-diags-tu10.cpp \
34 // RUN: -o %t/B.pcm -verify
36 // RUN: %clang_cc1 -std=c++20 -emit-obj %t/import-diags-tu11.cpp \
37 // RUN: -fmodule-file=C=%t/C.pcm -o %t/impl.o
39 // Test again with reduced BMI.
42 // RUN: split-file %s %t
44 // RUN: %clang_cc1 -std=c++20 -emit-reduced-module-interface %t/import-diags-tu1.cpp \
47 // RUN: %clang_cc1 -std=c++20 -emit-reduced-module-interface %t/import-diags-tu2.cpp \
50 // RUN: %clang_cc1 -std=c++20 -emit-reduced-module-interface %t/import-diags-tu3.cpp \
51 // RUN: -fmodule-file=B=%t/B.pcm -fmodule-file=C=%t/C.pcm -o %t/AOK1.pcm
53 // RUN: %clang_cc1 -std=c++20 -S %t/import-diags-tu4.cpp \
54 // RUN: -fmodule-file=AOK1=%t/AOK1.pcm -fmodule-file=B=%t/B.pcm \
55 // RUN: -fmodule-file=C=%t/C.pcm -o %t/tu_3.s -verify
57 // RUN: %clang_cc1 -std=c++20 -emit-reduced-module-interface %t/import-diags-tu5.cpp \
58 // RUN: -fmodule-file=B=%t/B.pcm -fmodule-file=C=%t/C.pcm -o %t/BC.pcm -verify
60 // RUN: %clang_cc1 -std=c++20 -S %t/import-diags-tu6.cpp \
61 // RUN: -fmodule-file=B=%t/B.pcm -fmodule-file=C=%t/C.pcm -o %t/tu_5.s -verify
63 // RUN: %clang_cc1 -std=c++20 -emit-reduced-module-interface %t/import-diags-tu7.cpp \
64 // RUN: -fmodule-file=B=%t/B.pcm -o %t/D.pcm -verify
66 // RUN: %clang_cc1 -std=c++20 -emit-reduced-module-interface %t/import-diags-tu8.cpp \
67 // RUN: -fmodule-file=B=%t/B.pcm -o %t/D.pcm -verify
69 // RUN: %clang_cc1 -std=c++20 -S %t/import-diags-tu9.cpp \
70 // RUN: -fmodule-file=B=%t/B.pcm -o %t/tu_8.s -verify
72 // RUN: %clang_cc1 -std=c++20 -emit-reduced-module-interface %t/import-diags-tu10.cpp \
73 // RUN: -o %t/B.pcm -verify
75 // RUN: %clang_cc1 -std=c++20 -emit-obj %t/import-diags-tu11.cpp \
76 // RUN: -fmodule-file=C=%t/C.pcm -o %t/impl.o
78 // Test diagnostics for incorrect module import sequences.
80 //--- import-diags-tu1.cpp
86 // expected-no-diagnostics
88 //--- import-diags-tu2.cpp
94 // expected-no-diagnostics
96 //--- import-diags-tu3.cpp
103 export
int theAnswer ();
105 // expected-no-diagnostics
107 //--- import-diags-tu4.cpp
113 export import C
; // expected-error {{export declaration can only be used within a module purview}}
115 int theAnswer () { return 42; }
117 //--- import-diags-tu5.cpp
123 int foo () { return 10; }
125 import C
; // expected-error {{imports must immediately follow the module declaration}}
127 //--- import-diags-tu6.cpp
129 module B
; // implicitly imports B.
131 int foo () { return 10; }
133 import C
; // expected-error {{imports must immediately follow the module declaration}}
135 //--- import-diags-tu7.cpp
138 // We can only have preprocessor directives here, which permits
139 // header units (include-translated or not) and named modules.
144 // expected-no-diagnostics
146 //--- import-diags-tu8.cpp
154 import B
; // expected-error {{imports must immediately follow the module declaration}}
156 //--- import-diags-tu9.cpp
160 import B
; // expected-error {{import of module 'B' appears within its own implementation}}
162 //--- import-diags-tu10.cpp
166 import B
; // expected-error {{import of module 'B' appears within its own interface}}
168 //--- import-diags-tu11.cpp
174 int baz() { return 6174; }
176 // expected-no-diagnostics