2009-12-16 04:14:24 +08:00
|
|
|
// RUN: %clang_cc1 %s -triple=x86_64-apple-darwin10 -emit-llvm -o - | FileCheck %s
|
2009-12-07 15:59:52 +08:00
|
|
|
// PR5697
|
|
|
|
namespace PR5697 {
|
|
|
|
struct A {
|
|
|
|
virtual void f() { }
|
|
|
|
A();
|
|
|
|
A(int);
|
|
|
|
};
|
|
|
|
|
|
|
|
// A does not have a key function, so the first constructor we emit should
|
|
|
|
// cause the vtable to be defined (without assertions.)
|
2011-01-24 08:46:19 +08:00
|
|
|
// CHECK: @_ZTVN6PR56971AE = linkonce_odr unnamed_addr constant
|
2009-12-07 15:59:52 +08:00
|
|
|
A::A() { }
|
|
|
|
A::A(int) { }
|
|
|
|
}
|
2010-01-06 03:06:31 +08:00
|
|
|
|
|
|
|
// Make sure that we don't assert when building the vtable for a class
|
|
|
|
// template specialization or explicit instantiation with a key
|
|
|
|
// function.
|
|
|
|
template<typename T>
|
|
|
|
struct Base {
|
|
|
|
virtual ~Base();
|
|
|
|
};
|
|
|
|
|
|
|
|
template<typename T>
|
|
|
|
struct Derived : public Base<T> { };
|
|
|
|
|
|
|
|
template<>
|
|
|
|
struct Derived<char> : public Base<char> {
|
|
|
|
virtual void anchor();
|
|
|
|
};
|
|
|
|
|
|
|
|
void Derived<char>::anchor() { }
|