forked from OSchip/llvm-project
Add typeinfo support for T* and const T* for all builtin types T.
llvm-svn: 89030
This commit is contained in:
parent
5b2592ed65
commit
8f5e6770e7
|
@ -253,6 +253,19 @@ public:
|
||||||
// We expect all type_info objects for builtin types to be in the library.
|
// We expect all type_info objects for builtin types to be in the library.
|
||||||
return BuildTypeRef(Ty);
|
return BuildTypeRef(Ty);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
case Type::Pointer: {
|
||||||
|
QualType PTy = Ty->getPointeeType();
|
||||||
|
Qualifiers Q = PTy.getQualifiers();
|
||||||
|
Q.removeConst();
|
||||||
|
// T* and const T* for all builtin types T are expected in the library.
|
||||||
|
if (isa<BuiltinType>(PTy) && Q.empty())
|
||||||
|
return BuildTypeRef(Ty);
|
||||||
|
|
||||||
|
assert(0 && "typeid expression");
|
||||||
|
const llvm::Type *Int8PtrTy = llvm::Type::getInt8PtrTy(VMContext);
|
||||||
|
return llvm::Constant::getNullValue(Int8PtrTy);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
|
@ -106,6 +106,8 @@ void test2_2(test1_D *dp) {
|
||||||
test2_1();
|
test2_1();
|
||||||
if (typeid(int) == typeid(float))
|
if (typeid(int) == typeid(float))
|
||||||
test2_1();
|
test2_1();
|
||||||
|
if (typeid(int*) == typeid(const int *))
|
||||||
|
test2_1();
|
||||||
}
|
}
|
||||||
|
|
||||||
// CHECK-LL:define void @_Z7test2_2P7test1_D(%class.test1_B7* %dp) nounwind {
|
// CHECK-LL:define void @_Z7test2_2P7test1_D(%class.test1_B7* %dp) nounwind {
|
||||||
|
@ -130,4 +132,6 @@ void test2_2(test1_D *dp) {
|
||||||
// CHECK-LL-NEXT: %8 = load %"class.std::type_info"** %7
|
// CHECK-LL-NEXT: %8 = load %"class.std::type_info"** %7
|
||||||
// CHECK-LL-NEXT: %call7 = call zeroext i1 @_ZNKSt9type_infoeqERKS_(%"class.std::type_info"* %8, %"class.std::type_info"* bitcast (%1* @_ZTI7test1_D to %"class.std::type_info"*))
|
// CHECK-LL-NEXT: %call7 = call zeroext i1 @_ZNKSt9type_infoeqERKS_(%"class.std::type_info"* %8, %"class.std::type_info"* bitcast (%1* @_ZTI7test1_D to %"class.std::type_info"*))
|
||||||
|
|
||||||
// CHECK-LL: %call10 = call zeroext i1 @_ZNKSt9type_infoeqERKS_(%"class.std::type_info"* bitcast (i8** @_ZTIi to %"class.std::type_info"*), %"class.std::type_info"* bitcast (i8** @_ZTIf to %"class.std::type_info"*)) ; <i1> [#uses=1]
|
// CHECK-LL: %call10 = call zeroext i1 @_ZNKSt9type_infoeqERKS_(%"class.std::type_info"* bitcast (i8** @_ZTIi to %"class.std::type_info"*), %"class.std::type_info"* bitcast (i8** @_ZTIf to %"class.std::type_info"*))
|
||||||
|
|
||||||
|
// CHECK-LL: %call13 = call zeroext i1 @_ZNKSt9type_infoeqERKS_(%"class.std::type_info"* bitcast (i8** @_ZTIPi to %"class.std::type_info"*), %"class.std::type_info"* bitcast (i8** @_ZTIPKi to %"class.std::type_info"*))
|
||||||
|
|
Loading…
Reference in New Issue