mirror of
https://github.com/llvm/llvm-project.git
synced 2025-04-27 15:56:07 +00:00

The new added test has problems on windows since the patch is about ABI and MSVC ABI is not covered. Skip the test on windows to make the CI green.
99 lines
2.6 KiB
C++
99 lines
2.6 KiB
C++
// REQUIRES: !system-windows
|
|
|
|
// RUN: rm -rf %t
|
|
// RUN: split-file %s %t
|
|
// RUN: cd %t
|
|
//
|
|
// RUN: %clang_cc1 -triple %itanium_abi_triple -std=c++20 -emit-module-interface \
|
|
// RUN: %t/Mod.cppm -o %t/Mod.pcm
|
|
//
|
|
// RUN: %clang_cc1 -triple %itanium_abi_triple -std=c++20 %t/Mod.pcm \
|
|
// RUN: -emit-llvm -o - | FileCheck %t/Mod.cppm
|
|
// RUN: %clang_cc1 -triple %itanium_abi_triple -std=c++20 -fmodule-file=Mod=%t/Mod.pcm \
|
|
// RUN: %t/Use.cpp -emit-llvm -o - | FileCheck %t/Use.cpp
|
|
//
|
|
// RUN: %clang_cc1 -triple %itanium_abi_triple -std=c++20 -emit-module-interface \
|
|
// RUN: %t/Mod.cppm -o %t/Mod.pcm -DKEY_FUNCTION_INLINE
|
|
//
|
|
// RUN: %clang_cc1 -triple %itanium_abi_triple -std=c++20 %t/Mod.pcm \
|
|
// RUN: -emit-llvm -o - | FileCheck %t/Mod.cppm -check-prefix=CHECK-INLINE
|
|
// RUN: %clang_cc1 -triple %itanium_abi_triple -std=c++20 -fmodule-file=Mod=%t/Mod.pcm \
|
|
// RUN: %t/Use.cpp -emit-llvm -o - | FileCheck %t/Use.cpp -check-prefix=CHECK-INLINE
|
|
//
|
|
// RUN: %clang_cc1 -triple %itanium_abi_triple -std=c++20 -emit-module-interface \
|
|
// RUN: %t/M-A.cppm -o %t/M-A.pcm
|
|
// RUN: %clang_cc1 -triple %itanium_abi_triple -std=c++20 -fmodule-file=M:A=%t/M-A.pcm \
|
|
// RUN: %t/M-B.cppm -emit-llvm -o - | FileCheck %t/M-B.cppm
|
|
|
|
//--- Mod.cppm
|
|
export module Mod;
|
|
|
|
export class Base {
|
|
public:
|
|
virtual ~Base();
|
|
};
|
|
#ifdef KEY_FUNCTION_INLINE
|
|
inline
|
|
#endif
|
|
Base::~Base() {}
|
|
|
|
// CHECK: @_ZTVW3Mod4Base = unnamed_addr constant
|
|
// CHECK: @_ZTSW3Mod4Base = constant
|
|
// CHECK: @_ZTIW3Mod4Base = constant
|
|
|
|
// CHECK-INLINE: @_ZTVW3Mod4Base = linkonce_odr unnamed_addr constant
|
|
// CHECK-INLINE: @_ZTSW3Mod4Base = linkonce_odr constant
|
|
// CHECK-INLINE: @_ZTIW3Mod4Base = linkonce_odr constant
|
|
|
|
module :private;
|
|
int private_use() {
|
|
Base base;
|
|
return 43;
|
|
}
|
|
|
|
//--- Use.cpp
|
|
import Mod;
|
|
int use() {
|
|
Base* base = new Base();
|
|
return 43;
|
|
}
|
|
|
|
// CHECK-NOT: @_ZTSW3Mod4Base = constant
|
|
// CHECK-NOT: @_ZTIW3Mod4Base = constant
|
|
// CHECK: @_ZTVW3Mod4Base = external unnamed_addr
|
|
|
|
// CHECK-INLINE: @_ZTVW3Mod4Base = linkonce_odr unnamed_addr constant
|
|
// CHECK-INLINE: @_ZTSW3Mod4Base = linkonce_odr constant
|
|
// CHECK-INLINE: @_ZTIW3Mod4Base = linkonce_odr constant
|
|
|
|
// Check the case that the declaration of the key function comes from another
|
|
// module unit but the definition of the key function comes from the current
|
|
// mdoule unit.
|
|
|
|
//--- M-A.cppm
|
|
export module M:A;
|
|
export class C {
|
|
public:
|
|
virtual ~C();
|
|
};
|
|
|
|
int a_use() {
|
|
C c;
|
|
return 43;
|
|
}
|
|
|
|
//--- M-B.cppm
|
|
export module M:B;
|
|
import :A;
|
|
|
|
C::~C() {}
|
|
|
|
int b_use() {
|
|
C c;
|
|
return 43;
|
|
}
|
|
|
|
// CHECK: @_ZTVW1M1C = unnamed_addr constant
|
|
// CHECK: @_ZTSW1M1C = constant
|
|
// CHECK: @_ZTIW1M1C = constant
|