// Test that we won't write additional information into the Reduced BMI if the // module purview is empty. // // RUN: rm -rf %t // RUN: mkdir -p %t // RUN: split-file %s %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/A.cppm -emit-reduced-module-interface -o %t/A.pcm \ // RUN: -fmodule-file=M=%t/M.pcm // RUN: llvm-bcanalyzer --dump --disable-histogram --show-binary-blobs %t/A.pcm > %t/A.dump // RUN: cat %t/A.dump | FileCheck %t/A.cppm // // RUN: %clang_cc1 -std=c++20 %t/A1.cppm -emit-reduced-module-interface -o %t/A1.pcm \ // RUN: -fmodule-file=M=%t/M.pcm // RUN: llvm-bcanalyzer --dump --disable-histogram --show-binary-blobs %t/A1.pcm > %t/A1.dump // RUN: cat %t/A1.dump | FileCheck %t/A1.cppm //--- foo.h namespace ns { template class A { }; extern template class A; inline A a() { return A(); } template A _av_ = A(); auto _av_1 = _av_; auto _av_2 = _av_; template <> class A { }; void func(A, ...) { } } struct S { union { unsigned int V; struct { int v1; int v2; ns::A a1; } WESQ; }; union { double d; struct { int v1; unsigned v2; ns::A a1; } Another; }; }; //--- M.cppm module; #include "foo.h" export module M; export namespace nv { using ns::A; using ns::a; using ns::_av_; using ns::func; } using ::S; //--- A.cppm module; #include "foo.h" export module A; import M; // CHECK-NOT: