// 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
