// RUN: rm -rf %t // RUN: split-file %s %t // RUN: %clang_cc1 -std=c++20 -verify -emit-module-interface %t/A.cpp -o %t/A.pcm // RUN: %clang_cc1 -std=c++20 -verify -emit-module-interface %t/myV.cpp -o %t/myV.pcm // RUN: %clang_cc1 -std=c++20 -verify -emit-module-interface -fmodule-file=V=%t/myV.pcm %t/partition.cpp -o %t/partition.pcm // RUN: %clang_cc1 -std=c++20 -fsyntax-only -verify -fmodule-file=V=%t/myV.pcm -fmodule-file=A=%t/A.pcm -fmodule-file=A:partition=%t/partition.pcm %t/interface.cpp //--- A.cpp // expected-no-diagnostics export module A; //--- myV.cpp // expected-no-diagnostics export module V; export struct myV{}; //--- uses_vector.h // expected-no-diagnostics #ifndef x #define x import V; #endif //--- partition.cpp // expected-no-diagnostics module; #include "uses_vector.h" // textually expands to import V; module A:partition; //--- interface.cpp module A; import :partition; myV V; // expected-error {{declaration of 'myV' must be imported from module 'V' before it is required}} // expected-note@myV.cpp:4 {{declaration here is not visible}}