diff options
| author | David Majnemer <david.majnemer@gmail.com> | 2014-06-23 17:30:27 +0000 |
|---|---|---|
| committer | David Majnemer <david.majnemer@gmail.com> | 2014-06-23 17:30:27 +0000 |
| commit | dd6ab8221e2bde33647e4d4f72233a24c2d55681 (patch) | |
| tree | 62c7a22a1924187fe750a7697d412a152304b1bc /clang | |
| parent | 2cc485b6a91fbcf91814705e6433ff4a880aa5d6 (diff) | |
| download | bcm5719-llvm-dd6ab8221e2bde33647e4d4f72233a24c2d55681.tar.gz bcm5719-llvm-dd6ab8221e2bde33647e4d4f72233a24c2d55681.zip | |
MS ABI: Add an additional test for typeid
This tests typeid with polymorphic arguments which have an extendable
virtual function table.
llvm-svn: 211505
Diffstat (limited to 'clang')
| -rw-r--r-- | clang/test/CodeGenCXX/microsoft-abi-typeid.cpp | 7 |
1 files changed, 7 insertions, 0 deletions
diff --git a/clang/test/CodeGenCXX/microsoft-abi-typeid.cpp b/clang/test/CodeGenCXX/microsoft-abi-typeid.cpp index 3875c56ca42..0b73f91dff7 100644 --- a/clang/test/CodeGenCXX/microsoft-abi-typeid.cpp +++ b/clang/test/CodeGenCXX/microsoft-abi-typeid.cpp @@ -7,6 +7,7 @@ struct V { virtual void f(); }; struct A : virtual V { A(); }; extern A a; +extern V v; extern int b; A* fn(); @@ -43,3 +44,9 @@ const std::type_info* test3_typeid() { return &typeid(*fn()); } const std::type_info* test4_typeid() { return &typeid(b); } // CHECK: define %struct.type_info* @"\01?test4_typeid@@YAPBUtype_info@@XZ"() // CHECK: ret %struct.type_info* bitcast (%"MSRTTITypeDescriptor\02"* @"\01??_R0H@8" to %struct.type_info*) + +const std::type_info* test5_typeid() { return &typeid(v); } +// CHECK: define %struct.type_info* @"\01?test5_typeid@@YAPBUtype_info@@XZ"() +// CHECK: [[RT:%.*]] = tail call i8* @__RTtypeid(i8* bitcast (%struct.V* @"\01?v@@3UV@@A" to i8*)) +// CHECK-NEXT: [[RET:%.*]] = bitcast i8* [[RT]] to %struct.type_info* +// CHECK-NEXT: ret %struct.type_info* [[RET]] |

