brintos

brintos / llvm-project-archived public Read only

0
0
Text · 3.1 KiB · 99795d6 Raw
119 lines · plain
1// REQUIRES: !system-windows, !system-cygwin2//3// RUN: rm -rf %t4// RUN: mkdir -p %t5// RUN: split-file %s %t6//7// RUN: %clang_cc1 -std=c++20 -triple %itanium_abi_triple %t/Base.cppm \8// RUN:     -emit-module-interface -o %t/Base.pcm9// RUN: %clang_cc1 -std=c++20 -triple %itanium_abi_triple %t/Sub.cppm \10// RUN:     -emit-module-interface -o %t/Sub.pcm -fprebuilt-module-path=%t11// RUN: %clang_cc1 -std=c++20 -triple %itanium_abi_triple %t/Sub.pcm \12// RUN:     -emit-llvm -o %t/Sub.pcm -o - -fprebuilt-module-path=%t | \13// RUN:     FileCheck %t/Sub.cppm14// RUN: %clang_cc1 -std=c++20 -triple %itanium_abi_triple %t/main.cpp \15// RUN:     -emit-llvm -fprebuilt-module-path=%t -o - | FileCheck %t/main.cpp16//17// RUN: %clang_cc1 -std=c++20 -triple %itanium_abi_triple %t/Mod.cppm \18// RUN:     -emit-module-interface -o %t/Mod.pcm19// RUN: %clang_cc1 -std=c++20 -triple %itanium_abi_triple %t/Mod.pcm \20// RUN:     -emit-llvm -o - | FileCheck %t/Mod.cppm21// RUN: %clang_cc1 -std=c++20 -triple %itanium_abi_triple %t/Use.cpp \22// RUN:     -emit-llvm -fprebuilt-module-path=%t -o - | \23// RUN:     FileCheck %t/Use.cpp24 25//--- Base.cppm26export module Base;27 28export template <class>29class Base30{31public:32    constexpr Base();33    constexpr virtual ~Base();34};35 36template <class X>37constexpr Base<X>::Base() = default;38 39template <class X>40constexpr Base<X>::~Base() = default;41 42//--- Sub.cppm43export module Sub;44export import Base;45 46export class Sub : public Base<int>47{48};49 50// CHECK: @_ZTIW4Base4BaseIiE = {{.*}}linkonce_odr51 52//--- main.cpp53import Sub;54 55int main()56{57    Base<int> *b = new Sub();58    delete b;59}60 61// CHECK: @_ZTIW4Base4BaseIiE = {{.*}}linkonce_odr62 63//--- Mod.cppm64export module Mod;65 66export class NonTemplate {67public:68    virtual ~NonTemplate();69};70 71// CHECK: @_ZTIW3Mod11NonTemplate = {{.*}}constant72 73export template <class C>74class Template {75public:76    virtual ~Template();77};78 79export template<>80class Template<char> {81public:82    virtual ~Template();83};84 85// CHECK: @_ZTIW3Mod8TemplateIcE = {{.*}}constant86 87export template class Template<unsigned>;88 89// CHECK: @_ZTIW3Mod8TemplateIjE = {{.*}}weak_odr90 91export extern template class Template<double>;92 93auto v = new Template<signed int>();94 95// CHECK: @_ZTIW3Mod8TemplateIiE = {{.*}}linkonce_odr96 97//--- Use.cpp98import Mod;99 100auto v1 = new NonTemplate();101auto v2 = new Template<char>();102auto v3 = new Template<unsigned>();103auto v4 = new Template<double>();104auto v5 = new Template<signed int>();105auto v6 = new Template<NonTemplate>();106 107// CHECK: @_ZTVW3Mod11NonTemplate = {{.*}}external108// CHECK: @_ZTVW3Mod8TemplateIcE = {{.*}}external109// CHECK: @_ZTVW3Mod8TemplateIjE = {{.*}}weak_odr110// CHECK: @_ZTIW3Mod8TemplateIjE = {{.*}}weak_odr111// CHECK: @_ZTSW3Mod8TemplateIjE = {{.*}}weak_odr112// CHECK: @_ZTVW3Mod8TemplateIdE = {{.*}}external113// CHECK: @_ZTVW3Mod8TemplateIiE = {{.*}}linkonce_odr114// CHECK: @_ZTIW3Mod8TemplateIiE = {{.*}}linkonce_odr115// CHECK: @_ZTSW3Mod8TemplateIiE = {{.*}}linkonce_odr116// CHECK: @_ZTVW3Mod8TemplateIS_11NonTemplateE = {{.*}}linkonce_odr117// CHECK: @_ZTIW3Mod8TemplateIS_11NonTemplateE = {{.*}}linkonce_odr118// CHECK: @_ZTSW3Mod8TemplateIS_11NonTemplateE = {{.*}}linkonce_odr119