1*f4a2713aSLionel Sambuc // RUN: %clang_cc1 -triple x86_64-apple-darwin12 -emit-llvm -o - %s | FileCheck %s
2*f4a2713aSLionel Sambuc
~A()3*f4a2713aSLionel Sambuc class A { virtual ~A() {} };
~B()4*f4a2713aSLionel Sambuc class B { virtual ~B() {} };
5*f4a2713aSLionel Sambuc
6*f4a2713aSLionel Sambuc class C : A { char x; };
7*f4a2713aSLionel Sambuc class D : public A { short y; };
8*f4a2713aSLionel Sambuc class E : public A, public B { int z; };
9*f4a2713aSLionel Sambuc class F : public virtual A { long long w; };
10*f4a2713aSLionel Sambuc class G : virtual A { long long w; };
11*f4a2713aSLionel Sambuc
12*f4a2713aSLionel Sambuc class H : public E { int a; };
13*f4a2713aSLionel Sambuc class I : public F { char b; };
14*f4a2713aSLionel Sambuc
15*f4a2713aSLionel Sambuc class J : public H { char q; };
16*f4a2713aSLionel Sambuc class K : public C, public B { char q; };
17*f4a2713aSLionel Sambuc
18*f4a2713aSLionel Sambuc class XA : public A { };
19*f4a2713aSLionel Sambuc class XB : public A { };
20*f4a2713aSLionel Sambuc class XC : public virtual A { };
21*f4a2713aSLionel Sambuc class X : public XA, public XB, public XC { };
22*f4a2713aSLionel Sambuc
test(A * a,B * b)23*f4a2713aSLionel Sambuc void test(A *a, B *b) {
24*f4a2713aSLionel Sambuc volatile C *ac = dynamic_cast<C *>(a);
25*f4a2713aSLionel Sambuc // CHECK: i8* bitcast ({ i8*, i8* }* @_ZTI1A to i8*), i8* bitcast ({ i8*, i8*, i32, i32, i8*, i64 }* @_ZTI1C to i8*), i64 -2)
26*f4a2713aSLionel Sambuc volatile D *ad = dynamic_cast<D *>(a);
27*f4a2713aSLionel Sambuc // CHECK: i8* bitcast ({ i8*, i8* }* @_ZTI1A to i8*), i8* bitcast ({ i8*, i8*, i8* }* @_ZTI1D to i8*), i64 0)
28*f4a2713aSLionel Sambuc volatile E *ae = dynamic_cast<E *>(a);
29*f4a2713aSLionel Sambuc // CHECK: i8* bitcast ({ i8*, i8* }* @_ZTI1A to i8*), i8* bitcast ({ i8*, i8*, i32, i32, i8*, i64, i8*, i64 }* @_ZTI1E to i8*), i64 0)
30*f4a2713aSLionel Sambuc volatile F *af = dynamic_cast<F *>(a);
31*f4a2713aSLionel Sambuc // CHECK: i8* bitcast ({ i8*, i8* }* @_ZTI1A to i8*), i8* bitcast ({ i8*, i8*, i32, i32, i8*, i64 }* @_ZTI1F to i8*), i64 -1)
32*f4a2713aSLionel Sambuc volatile G *ag = dynamic_cast<G *>(a);
33*f4a2713aSLionel Sambuc // CHECK: i8* bitcast ({ i8*, i8* }* @_ZTI1A to i8*), i8* bitcast ({ i8*, i8*, i32, i32, i8*, i64 }* @_ZTI1G to i8*), i64 -2)
34*f4a2713aSLionel Sambuc volatile H *ah = dynamic_cast<H *>(a);
35*f4a2713aSLionel Sambuc // CHECK: i8* bitcast ({ i8*, i8* }* @_ZTI1A to i8*), i8* bitcast ({ i8*, i8*, i8* }* @_ZTI1H to i8*), i64 0)
36*f4a2713aSLionel Sambuc volatile I *ai = dynamic_cast<I *>(a);
37*f4a2713aSLionel Sambuc // CHECK: i8* bitcast ({ i8*, i8* }* @_ZTI1A to i8*), i8* bitcast ({ i8*, i8*, i8* }* @_ZTI1I to i8*), i64 -1)
38*f4a2713aSLionel Sambuc volatile J *aj = dynamic_cast<J *>(a);
39*f4a2713aSLionel Sambuc // CHECK: i8* bitcast ({ i8*, i8* }* @_ZTI1A to i8*), i8* bitcast ({ i8*, i8*, i8* }* @_ZTI1J to i8*), i64 0)
40*f4a2713aSLionel Sambuc volatile K *ak = dynamic_cast<K *>(a);
41*f4a2713aSLionel Sambuc // CHECK: i8* bitcast ({ i8*, i8* }* @_ZTI1A to i8*), i8* bitcast ({ i8*, i8*, i32, i32, i8*, i64, i8*, i64 }* @_ZTI1K to i8*), i64 -2)
42*f4a2713aSLionel Sambuc volatile X *ax = dynamic_cast<X *>(a);
43*f4a2713aSLionel Sambuc // CHECK: i8* bitcast ({ i8*, i8* }* @_ZTI1A to i8*), i8* bitcast ({ i8*, i8*, i32, i32, i8*, i64, i8*, i64, i8*, i64 }* @_ZTI1X to i8*), i64 -1)
44*f4a2713aSLionel Sambuc
45*f4a2713aSLionel Sambuc volatile E *be = dynamic_cast<E *>(b);
46*f4a2713aSLionel Sambuc // CHECK: i8* bitcast ({ i8*, i8* }* @_ZTI1B to i8*), i8* bitcast ({ i8*, i8*, i32, i32, i8*, i64, i8*, i64 }* @_ZTI1E to i8*), i64 8)
47*f4a2713aSLionel Sambuc volatile G *bg = dynamic_cast<G *>(b);
48*f4a2713aSLionel Sambuc // CHECK: i8* bitcast ({ i8*, i8* }* @_ZTI1B to i8*), i8* bitcast ({ i8*, i8*, i32, i32, i8*, i64 }* @_ZTI1G to i8*), i64 -2)
49*f4a2713aSLionel Sambuc volatile J *bj = dynamic_cast<J *>(b);
50*f4a2713aSLionel Sambuc // CHECK: i8* bitcast ({ i8*, i8* }* @_ZTI1B to i8*), i8* bitcast ({ i8*, i8*, i8* }* @_ZTI1J to i8*), i64 8)
51*f4a2713aSLionel Sambuc volatile K *bk = dynamic_cast<K *>(b);
52*f4a2713aSLionel Sambuc // CHECK: i8* bitcast ({ i8*, i8* }* @_ZTI1B to i8*), i8* bitcast ({ i8*, i8*, i32, i32, i8*, i64, i8*, i64 }* @_ZTI1K to i8*), i64 16)
53*f4a2713aSLionel Sambuc }
54