// RUN: rm -rf %t // RUN: mkdir -p %t // RUN: split-file %s %t // RUN: cd %t // // RUN: %clang_cc1 -std=c++20 -fmodules -fimplicit-module-maps -x c++ -I%t \ // RUN: -emit-module -fmodule-name=ModuleA -o %t/ModuleA.pcm \ // RUN: %t/module.modulemap // // RUN: %clang_cc1 -std=c++20 -fmodules -fimplicit-module-maps -x c++ -I%t \ // RUN: -emit-module -fmodule-name=ModuleB -o %t/ModuleB.pcm \ // RUN: %t/module.modulemap // // RUN: %clang_cc1 -std=c++20 -fmodules -fimplicit-module-maps -x c++ -I%t \ // RUN: -fmodule-file=%t/ModuleA.pcm \ // RUN: -fmodule-file=%t/ModuleB.pcm \ // RUN: -verify %t/main.cpp //--- common.h #pragma once struct MyStruct { enum class MyEnum { A }; using enum MyEnum; }; //--- a.h #pragma once #include "common.h" //--- b.h #pragma once #include "common.h" //--- module.modulemap module ModuleA { header "a.h" export * } module ModuleB { header "b.h" export * } //--- main.cpp #include "a.h" #include "b.h" inline void use() { auto x = MyStruct::A; } // expected-no-diagnostics