// RUN: rm -rf %t // RUN: mkdir -p %t // RUN: split-file %s %t // // RUN: %clang_cc1 -std=c++20 %t/a.cppm -dwarf-version=4 -debug-info-kind=constructor \ // RUN: -emit-module-interface -o %t/a.pcm // RUN: %clang_cc1 -std=c++20 %t/b.cppm -dwarf-version=4 -debug-info-kind=constructor \ // RUN: -emit-module-interface -o %t/b.pcm -fmodule-file=a=%t/a.pcm // RUN: %clang_cc1 -std=c++20 %t/b.cpp -dwarf-version=4 -debug-info-kind=constructor \ // RUN: -emit-llvm -o - -fmodule-file=a=%t/a.pcm -fmodule-file=b=%t/b.pcm | FileCheck %t/b.cpp //--- a.cppm export module a; export template class a { private: T *data; public: virtual T* getData(); }; extern template class a; //--- b.cppm export module b; import a; export struct b { a v; }; //--- b.cpp module b; extern "C" void func() { b(); } // It is fine enough to check that we won't crash. // CHECK: define {{.*}}void @func()