1// RUN: rm -rf %t 2// RUN: mkdir %t 3// RUN: split-file %s %t 4 5// RUN: %clang_cc1 -std=c++20 %t/a.cppm -triple %itanium_abi_triple -emit-module-interface -o %t/a.pcm 6// RUN: %clang_cc1 -std=c++20 %t/a.cc -triple %itanium_abi_triple -fmodule-file=a=%t/a.pcm -emit-llvm -o - | FileCheck %t/a.cc 7// 8// RUN: %clang_cc1 -std=c++20 %t/a.cppm -triple %itanium_abi_triple -emit-reduced-module-interface -o %t/a.pcm 9// RUN: %clang_cc1 -std=c++20 %t/a.cc -triple %itanium_abi_triple -fmodule-file=a=%t/a.pcm -emit-llvm -o - | FileCheck %t/a.cc 10 11//--- a.cppm 12export module a; 13class base { 14public: 15 ~base() = default; 16 virtual void foo(); 17}; 18 19template <class T> 20class a : public base { 21public: 22 virtual void foo() override; 23}; 24 25extern template class a<int>; 26 27//--- a.cc 28module a; 29 30template <class T> 31void a<T>::foo() {} 32 33template class a<int>; 34// CHECK: _ZTVW1a1aIiE 35