================
@@ -1277,6 +1309,70 @@ void
CIRGenItaniumRTTIBuilder::buildVMIClassTypeInfo(mlir::Location loc,
}
}
+void CIRGenItaniumRTTIBuilder::buildPointerTypeInfo(mlir::Location loc,
+ QualType ty) {
+ // Itanium C++ ABI 2.9.4p7:
+ // abi::__pbase_type_info is a base for both pointer types and
+ // pointer-to-member types. It adds two data members:
+ //
+ // class __pbase_type_info : public std::type_info {
+ // public:
+ // unsigned int __flags;
+ // const std::type_info *__pointee;
+ //
+ // enum __masks {
+ // __const_mask = 0x1,
+ // __volatile_mask = 0x2,
+ // __restrict_mask = 0x4,
+ // __incomplete_mask = 0x8,
+ // __incomplete_class_mask = 0x10,
+ // __transaction_safe_mask = 0x20
+ // __noexcept_mask = 0x40
+ // };
+ // };
+ const unsigned int flags = extractPBaseFlags(cgm.getASTContext(), ty);
+
+ auto unsignedIntTy = cgm.convertType(cgm.getASTContext().UnsignedIntTy);
+ mlir::Attribute flagsAttr = cir::IntAttr::get(unsignedIntTy, flags);
+ fields.push_back(flagsAttr);
+
+ mlir::Attribute pointeeTypeInfo =
+ CIRGenItaniumRTTIBuilder(cxxABI, cgm).buildTypeInfo(loc, ty);
+ fields.push_back(pointeeTypeInfo);
+}
+
+void CIRGenItaniumRTTIBuilder::buildPointerToMemberTypeInfo(
+ mlir::Location loc, const MemberPointerType *ty) {
+
+ // The abi::__pointer_to_member_type_info type adds one field to
+ // abi::__pbase_type_info:
+ //
+ // class __pointer_to_member_type_info : public __pbase_type_info {
+ // public:
+ // const abi::__class_type_info *__context;
+ // };
+ QualType pointeeTy = ty->getPointeeType();
+
+ unsigned flags = extractPBaseFlags(cgm.getASTContext(), pointeeTy);
+
+ const auto *rd = ty->getMostRecentCXXRecordDecl();
+ if (!rd->hasDefinition())
+ flags |= PTI_ContainingClassIncomplete;
+
+ auto unsignedIntTy = cgm.convertType(cgm.getASTContext().UnsignedIntTy);
----------------
AmrDeveloper wrote:
```suggestion
mlir::Type unsignedIntTy = cgm.convertType(cgm.getASTContext().UnsignedIntTy);
```
https://github.com/llvm/llvm-project/pull/184011
_______________________________________________
cfe-commits mailing list
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits