1 // RUN: %clang_cc1 -triple x86_64-windows-gnu     -fdeclspec -emit-llvm -o - %s | FileCheck %s -DDSO_ATTRS="dso_local dllexport"
2 // RUN: %clang_cc1 -triple x86_64-windows-itanium -fdeclspec -emit-llvm -o - %s | FileCheck %s -DDSO_ATTRS="dso_local dllexport"
3 // RUN: %clang_cc1 -triple x86_64-scei-ps4        -fdeclspec -emit-llvm -o - %s | FileCheck %s -DDSO_ATTRS=dllexport
4 
5 struct __declspec(dllexport) A {
6   virtual void m();
7 };
8 struct __declspec(dllexport) B {
9   virtual void m();
10 };
11 struct __declspec(dllexport) C : A, B {
12   virtual void m();
13 };
m()14 void C::m() {}
15 // CHECK: define{{.*}} [[DSO_ATTRS]] void @_ZThn8_N1C1mEv
16 
17 struct Base {
18   virtual void m();
19 };
20 struct __declspec(dllexport) Derived : virtual Base {
21   virtual void m();
22 };
m()23 void Derived::m() {}
24 // CHECK: define{{.*}} [[DSO_ATTRS]] void @_ZTv0_n24_N7Derived1mEv
25