diff options
author | Roman Divacky <rdivacky@FreeBSD.org> | 2009-12-01 11:08:04 +0000 |
---|---|---|
committer | Roman Divacky <rdivacky@FreeBSD.org> | 2009-12-01 11:08:04 +0000 |
commit | 1569ce68681d909594d64f9b056d71f5dd7563bf (patch) | |
tree | 867cbbe32a66fd7d62dd9ce9df23a23fefdb8290 /test/CodeGenCXX/virtual-base-cast.cpp | |
parent | f5bd02d290ff15268853e0456c130a1afa15e907 (diff) | |
download | src-1569ce68681d909594d64f9b056d71f5dd7563bf.tar.gz src-1569ce68681d909594d64f9b056d71f5dd7563bf.zip |
Update clang to r90226.
Notes
Notes:
svn path=/vendor/clang/dist/; revision=199990
Diffstat (limited to 'test/CodeGenCXX/virtual-base-cast.cpp')
-rw-r--r-- | test/CodeGenCXX/virtual-base-cast.cpp | 38 |
1 files changed, 31 insertions, 7 deletions
diff --git a/test/CodeGenCXX/virtual-base-cast.cpp b/test/CodeGenCXX/virtual-base-cast.cpp index a825120ad229..eae868f9b69c 100644 --- a/test/CodeGenCXX/virtual-base-cast.cpp +++ b/test/CodeGenCXX/virtual-base-cast.cpp @@ -1,9 +1,33 @@ -// RUN: clang-cc -emit-llvm-only %s +// RUN: clang-cc -emit-llvm %s -o - -triple i686-pc-linux-gnu | FileCheck %s -struct A { virtual ~A(); }; -struct B : A { virtual ~B(); }; -struct C : virtual B { virtual ~C(); }; +struct A { int a; virtual int aa(); }; +struct B { int b; virtual int bb(); }; +struct C : virtual A, virtual B { int c; virtual int aa(); virtual int bb(); }; +struct AA { int a; virtual int aa(); }; +struct BB { int b; virtual int bb(); }; +struct CC : AA, BB { virtual int aa(); virtual int bb(); virtual int cc(); }; +struct D : virtual C, virtual CC { int e; }; -void f(C *c) { - A* a = c; -} +D* x; + +A* a() { return x; } +// CHECK: @_Z1av() nounwind +// CHECK: [[VBASEOFFSETPTRA:%[a-zA-Z0-9\.]+]] = getelementptr i8* {{.*}}, i64 -16 +// CHECK: [[CASTVBASEOFFSETPTRA:%[a-zA-Z0-9\.]+]] = bitcast i8* [[VBASEOFFSETPTRA]] to i32* +// CHECK: load i32* [[CASTVBASEOFFSETPTRA]] +// CHECK: } + +B* b() { return x; } +// CHECK: @_Z1bv() nounwind +// CHECK: [[VBASEOFFSETPTRA:%[a-zA-Z0-9\.]+]] = getelementptr i8* {{.*}}, i64 -20 +// CHECK: [[CASTVBASEOFFSETPTRA:%[a-zA-Z0-9\.]+]] = bitcast i8* [[VBASEOFFSETPTRA]] to i32* +// CHECK: load i32* [[CASTVBASEOFFSETPTRA]] +// CHECK: } + +BB* c() { return x; } +// CHECK: @_Z1cv() nounwind +// CHECK: [[VBASEOFFSETPTRC:%[a-zA-Z0-9\.]+]] = getelementptr i8* {{.*}}, i64 -24 +// CHECK: [[CASTVBASEOFFSETPTRC:%[a-zA-Z0-9\.]+]] = bitcast i8* [[VBASEOFFSETPTRC]] to i32* +// CHECK: [[VBASEOFFSETC:%[a-zA-Z0-9\.]+]] = load i32* [[CASTVBASEOFFSETPTRC]] +// CHECK: add i32 [[VBASEOFFSETC]], 8 +// CHECK: } |