xref: /llvm-project/clang/test/Modules/vtable-windows.cppm (revision 847f9cb0e868c8ec34f9aa86fdf846f8c4e0388b)
1// RUN: rm -rf %t
2// RUN: mkdir %t
3// RUN: split-file %s %t
4//
5// RUN: %clang_cc1 -std=c++20 -triple i686-pc-windows-msvc %t/foo.cppm -emit-module-interface \
6// RUN:   -o %t/foo.pcm
7// RUN: %clang_cc1 -std=c++20 -triple i686-pc-windows-msvc %t/user.cc -fmodule-file=foo=%t/foo.pcm \
8// RUN:   -emit-llvm -o - -disable-llvm-passes | FileCheck %t/user.cc
9
10//--- foo.cppm
11export module foo;
12export struct Fruit {
13    virtual ~Fruit() = default;
14    virtual void eval();
15};
16
17//--- user.cc
18import foo;
19void test() {
20  Fruit *f = new Fruit();
21  f->eval();
22}
23
24// Check that the virtual table is an unnamed_addr constant in comdat that can
25// be merged with the virtual table with other TUs.
26// CHECK: unnamed_addr constant {{.*}}[ptr @"??_R4Fruit@@6B@", ptr @"??_GFruit@@UAEPAXI@Z", ptr @"?eval@Fruit@@UAEXXZ"{{.*}}comdat($"??_7Fruit@@6B@")
27