summaryrefslogtreecommitdiffstats
path: root/clang
diff options
context:
space:
mode:
authorDavid Majnemer <david.majnemer@gmail.com>2014-06-23 17:30:27 +0000
committerDavid Majnemer <david.majnemer@gmail.com>2014-06-23 17:30:27 +0000
commitdd6ab8221e2bde33647e4d4f72233a24c2d55681 (patch)
tree62c7a22a1924187fe750a7697d412a152304b1bc /clang
parent2cc485b6a91fbcf91814705e6433ff4a880aa5d6 (diff)
downloadbcm5719-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.cpp7
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]]
OpenPOWER on IntegriCloud