1 | // RUN: %clang_cc1 %s -triple=x86_64-apple-darwin10 -emit-llvm -o - | FileCheck %s |
2 | // PR5697 |
3 | namespace PR5697 { |
4 | struct A { |
5 | virtual void f() { } |
6 | A(); |
7 | A(int); |
8 | }; |
9 | |
10 | // A does not have a key function, so the first constructor we emit should |
11 | // cause the vtable to be defined (without assertions.) |
12 | // CHECK: @_ZTVN6PR56971AE = linkonce_odr unnamed_addr constant |
13 | A::A() { } |
14 | A::A(int) { } |
15 | } |
16 | |
17 | // Make sure that we don't assert when building the vtable for a class |
18 | // template specialization or explicit instantiation with a key |
19 | // function. |
20 | template<typename T> |
21 | struct Base { |
22 | virtual ~Base(); |
23 | }; |
24 | |
25 | template<typename T> |
26 | struct Derived : public Base<T> { }; |
27 | |
28 | template<> |
29 | struct Derived<char> : public Base<char> { |
30 | virtual void anchor(); |
31 | }; |
32 | |
33 | void Derived<char>::anchor() { } |
34 | |