diff options
author | Mike Stump <mrs@apple.com> | 2009-11-15 08:09:41 +0000 |
---|---|---|
committer | Mike Stump <mrs@apple.com> | 2009-11-15 08:09:41 +0000 |
commit | c2e84ae9a6d25cea3e583c768e576b4c981ec028 (patch) | |
tree | 29b48802ad5ceeaafef5a900a5a983cd95d72bb2 /test/CodeGenCXX/rtti.cpp | |
parent | 593564ba94ff854b7a410a4ca17ad34a90c5b761 (diff) |
Implement typeid for class types.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@88843 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'test/CodeGenCXX/rtti.cpp')
-rw-r--r-- | test/CodeGenCXX/rtti.cpp | 26 |
1 files changed, 26 insertions, 0 deletions
diff --git a/test/CodeGenCXX/rtti.cpp b/test/CodeGenCXX/rtti.cpp index d5ac986b38..f89396dd11 100644 --- a/test/CodeGenCXX/rtti.cpp +++ b/test/CodeGenCXX/rtti.cpp @@ -1,6 +1,11 @@ // RUN: clang-cc -triple x86_64-apple-darwin -std=c++0x -O0 -S %s -o %t.s // RUN: FileCheck --input-file=%t.s %s +// RUN: clang-cc -triple x86_64-apple-darwin -std=c++0x -emit-llvm %s -o %t.ll +// RUN: FileCheck -check-prefix LL --input-file=%t.ll %s + +#include <typeinfo> + class test1_B1 { virtual void foo() { } }; @@ -87,3 +92,24 @@ class test1_D : public test1_B7 { // CHECK-NEXT: .quad (__ZTVN10__cxxabiv120__si_class_type_infoE) + 16 // CHECK-NEXT: .quad __ZTS8test1_B2 // CHECK-NEXT: .quad __ZTI8test1_B1 + + +class NP { }; +void test2_1(); +void test2_2(test1_D *dp) { + test1_D &d = *dp; + if (typeid(d) == typeid(test1_D)) + test2_1(); + if (typeid(NP) == typeid(test1_D)) + test2_1(); +} + +// CHECK-LL:define void @_Z7test2_2P7test1_D(%class.test1_B7* %dp) nounwind { +// CHECK-LL: %tmp1 = load %class.test1_B7** %d +// CHECK-LL-NEXT: %0 = bitcast %class.test1_B7* %tmp1 to %"class.std::type_info"*** +// CHECK-LL-NEXT: %vtable = load %"class.std::type_info"*** %0 +// CHECK-LL-NEXT: %1 = getelementptr inbounds %"class.std::type_info"** %vtable, i64 -1 +// CHECK-LL-NEXT: %2 = load %"class.std::type_info"** %1 +// CHECK-LL-NEXT: %call = call zeroext i1 @_ZNK3std9type_infoeqERKS0_(%"class.std::type_info"* %2, %"class.std::type_info"* bitcast (%1* @_ZTI7test1_D to %"class.std::type_info"*)) + +// CHECK-LL: %call2 = call zeroext i1 @_ZNK3std9type_infoeqERKS0_(%"class.std::type_info"* bitcast (%0* @_ZTI2NP to %"class.std::type_info"*), %"class.std::type_info"* bitcast (%1* @_ZTI7test1_D to %"class.std::type_info"*)) |