blob: 478c4dfb2881d2a2e3fbeaac3f47a78504523cc6 [file] [log] [blame]
Martin Storsjo5be69bc2019-04-26 08:09:51 +00001// RUN: %clang_cc1 -emit-llvm -triple i686-mingw32 %s -o - | FileCheck %s
2
3template <class T>
4class c {
5 void f();
6};
7
8template <class T> void c<T>::f() {}
9
10template class __declspec(dllexport) c<int>;
11
12// CHECK: define {{.*}} dllexport {{.*}} @_ZN1cIiE1fEv
13
14extern template class __declspec(dllexport) c<char>;
15template class c<char>;
16
17// CHECK: define {{.*}} dllexport {{.*}} @_ZN1cIcE1fEv
18
19extern template class c<double>;
20template class __declspec(dllexport) c<double>;
21
22// CHECK-NOT: define {{.*}} dllexport {{.*}} @_ZN1cIdE1fEv
23
24template <class T>
25struct outer {
26 void f();
27 struct inner {
28 void f();
29 };
30};
31
32template <class T> void outer<T>::f() {}
33template <class T> void outer<T>::inner::f() {}
34
35template class __declspec(dllexport) outer<int>;
36
37// CHECK: define {{.*}} dllexport {{.*}} @_ZN5outerIiE1fEv
38// CHECK-NOT: define {{.*}} dllexport {{.*}} @_ZN5outerIiE5inner1fEv