@@ -305,6 +305,36 @@ def CIR_PointerType : CIR_Type<"Pointer", "ptr", [
305305 }];
306306}
307307
308+ //===----------------------------------------------------------------------===//
309+ // CIR_DataMemberType
310+ //===----------------------------------------------------------------------===//
311+
312+ def CIR_DataMemberType : CIR_Type<"DataMember", "data_member",
313+ [DeclareTypeInterfaceMethods<DataLayoutTypeInterface>]
314+ > {
315+ let summary = "CIR type that represents a pointer-to-data-member in C++";
316+ let description = [{
317+ `cir.data_member` models a pointer-to-data-member in C++. Values of this
318+ type are essentially offsets of the pointed-to member within one of its
319+ containing record.
320+ }];
321+
322+ let parameters = (ins "mlir::Type":$member_ty,
323+ "cir::RecordType":$class_ty);
324+
325+ let builders = [
326+ TypeBuilderWithInferredContext<(ins
327+ "mlir::Type":$member_ty, "cir::RecordType":$class_ty
328+ ), [{
329+ return $_get(member_ty.getContext(), member_ty, class_ty);
330+ }]>,
331+ ];
332+
333+ let assemblyFormat = [{
334+ `<` $member_ty `in` $class_ty `>`
335+ }];
336+ }
337+
308338//===----------------------------------------------------------------------===//
309339// CIR_VPtrType
310340//===----------------------------------------------------------------------===//
@@ -693,7 +723,7 @@ def CIRRecordType : Type<
693723def CIR_AnyType : AnyTypeOf<[
694724 CIR_VoidType, CIR_BoolType, CIR_ArrayType, CIR_VectorType, CIR_IntType,
695725 CIR_AnyFloatType, CIR_PointerType, CIR_FuncType, CIR_RecordType,
696- CIR_ComplexType, CIR_VPtrType
726+ CIR_ComplexType, CIR_VPtrType, CIR_DataMemberType
697727]>;
698728
699729#endif // CLANG_CIR_DIALECT_IR_CIRTYPES_TD
0 commit comments