// RUN: rm -rf %t // RUN: mkdir -p %t // RUN: split-file %s %t // // RUN: %clang_cc1 -std=c++20 %t/M.cppm -emit-module-interface -o %t/M.pcm // RUN: %clang_cc1 -std=c++20 %t/use.cpp -fsyntax-only -verify -fprebuilt-module-path=%t // RUN: %clang_cc1 -std=c++20 %t/M.cppm -emit-reduced-module-interface -o %t/M.pcm // RUN: %clang_cc1 -std=c++20 %t/use.cpp -fsyntax-only -verify -fprebuilt-module-path=%t // RUN: %clang_cc1 -std=c++20 %t/M0.cppm -emit-module-interface -o %t/M.pcm // RUN: %clang_cc1 -std=c++20 %t/use.cpp -fsyntax-only -verify -fprebuilt-module-path=%t -DMODULE_LOCAL // RUN: %clang_cc1 -std=c++20 %t/M0.cpp -fsyntax-only -verify -fprebuilt-module-path=%t // RUN: %clang_cc1 -std=c++20 %t/M0.cppm -emit-reduced-module-interface -o %t/M.pcm // RUN: %clang_cc1 -std=c++20 %t/use.cpp -fsyntax-only -verify -fprebuilt-module-path=%t -DMODULE_LOCAL // RUN: %clang_cc1 -std=c++20 %t/M0.cpp -fsyntax-only -verify -fprebuilt-module-path=%t // RUN: %clang_cc1 -std=c++20 %t/M2.cppm -emit-module-interface -o %t/M.pcm // RUN: %clang_cc1 -std=c++20 %t/use.cpp -fsyntax-only -verify -fprebuilt-module-path=%t // RUN: %clang_cc1 -std=c++20 %t/M2.cppm -emit-reduced-module-interface -o %t/M.pcm // RUN: %clang_cc1 -std=c++20 %t/use.cpp -fsyntax-only -verify -fprebuilt-module-path=%t // RUN: %clang_cc1 -std=c++20 %t/M3.cppm -emit-reduced-module-interface -o %t/M.pcm // RUN: %clang_cc1 -std=c++20 %t/use2.cpp -fsyntax-only -verify -fprebuilt-module-path=%t //--- enum.h enum { SomeName, }; //--- M.cppm module; #include "enum.h" export module M; export auto e = SomeName; //--- M0.cppm export module M; enum { SomeName, }; export auto e = SomeName; //--- M0.cpp // expected-no-diagnostics module M; auto a = SomeName; //--- use.cpp import M; auto a = SomeName; // expected-error {{use of undeclared identifier 'SomeName'}} auto b = decltype(e)::SomeName; //--- enum1.h extern "C++" { enum { SomeName, }; } //--- M2.cppm module; #include "enum1.h" export module M; export auto e = SomeName; //--- enums.h namespace nn { enum E { Value }; enum E2 { VisibleEnum }; enum AlwaysVisibleEnums { UnconditionallyVisible }; } //--- M3.cppm module; #include "enums.h" export module M; export namespace nn { using nn::E2::VisibleEnum; using nn::AlwaysVisibleEnums; } auto e1 = nn::Value; auto e2 = nn::VisibleEnum; //--- use2.cpp import M; auto e = nn::Value1; // expected-error {{no member named 'Value1' in namespace 'nn'}} auto e2 = nn::VisibleEnum; auto e3 = nn::UnconditionallyVisible;