[clang] 1b904e9 - [CIR][NFC] Unify the 'null data member attr' getters (#186876)
via cfe-commits
cfe-commits at lists.llvm.org
Wed Mar 18 06:28:48 PDT 2026
Author: Erich Keane
Date: 2026-03-18T06:28:43-07:00
New Revision: 1b904e948afb8ecad47e2e6c3ffa9bef3e02b8be
URL: https://github.com/llvm/llvm-project/commit/1b904e948afb8ecad47e2e6c3ffa9bef3e02b8be
DIFF: https://github.com/llvm/llvm-project/commit/1b904e948afb8ecad47e2e6c3ffa9bef3e02b8be.diff
LOG: [CIR][NFC] Unify the 'null data member attr' getters (#186876)
In preperation of actually lowering data members as fields to a record
type, this patch does a minor refactor to make their single current use
have a slightly simpler interface. This will prevent us from having to
copy/paste this later.
Also, this patch removes a pair of now-orphaned builders, instead
preferring to use the ones that come from the parent builder type.
Added:
Modified:
clang/lib/CIR/CodeGen/CIRGenBuilder.h
clang/lib/CIR/CodeGen/CIRGenExprScalar.cpp
clang/lib/CIR/CodeGen/CIRGenModule.cpp
clang/lib/CIR/CodeGen/CIRGenModule.h
Removed:
################################################################################
diff --git a/clang/lib/CIR/CodeGen/CIRGenBuilder.h b/clang/lib/CIR/CodeGen/CIRGenBuilder.h
index 8bfdbebb2c51f..b9852b50dbc62 100644
--- a/clang/lib/CIR/CodeGen/CIRGenBuilder.h
+++ b/clang/lib/CIR/CodeGen/CIRGenBuilder.h
@@ -422,16 +422,6 @@ class CIRGenBuilderTy : public cir::CIRBaseBuilderTy {
return getConstantInt(loc, getUInt64Ty(), c);
}
- /// Create constant nullptr for pointer-to-data-member type ty.
- cir::ConstantOp getNullDataMemberPtr(cir::DataMemberType ty,
- mlir::Location loc) {
- return cir::ConstantOp::create(*this, loc, getNullDataMemberAttr(ty));
- }
-
- cir::ConstantOp getNullMethodPtr(cir::MethodType ty, mlir::Location loc) {
- return cir::ConstantOp::create(*this, loc, getNullMethodAttr(ty));
- }
-
//===--------------------------------------------------------------------===//
// UnaryOp creation helpers
//===--------------------------------------------------------------------===//
diff --git a/clang/lib/CIR/CodeGen/CIRGenExprScalar.cpp b/clang/lib/CIR/CodeGen/CIRGenExprScalar.cpp
index bef487d95156f..7127a90b84ac3 100644
--- a/clang/lib/CIR/CodeGen/CIRGenExprScalar.cpp
+++ b/clang/lib/CIR/CodeGen/CIRGenExprScalar.cpp
@@ -2232,13 +2232,9 @@ mlir::Value ScalarExprEmitter::VisitCastExpr(CastExpr *ce) {
assert(!cir::MissingFeatures::cxxABI());
const MemberPointerType *mpt = ce->getType()->getAs<MemberPointerType>();
- if (mpt->isMemberFunctionPointerType()) {
- auto ty = mlir::cast<cir::MethodType>(cgf.convertType(destTy));
- return builder.getNullMethodPtr(ty, cgf.getLoc(subExpr->getExprLoc()));
- }
-
- auto ty = mlir::cast<cir::DataMemberType>(cgf.convertType(destTy));
- return builder.getNullDataMemberPtr(ty, cgf.getLoc(subExpr->getExprLoc()));
+ mlir::Location loc = cgf.getLoc(subExpr->getExprLoc());
+ return cgf.getBuilder().getConstant(
+ loc, cgf.cgm.emitNullMemberAttr(destTy, mpt));
}
case CK_ReinterpretMemberPointer: {
diff --git a/clang/lib/CIR/CodeGen/CIRGenModule.cpp b/clang/lib/CIR/CodeGen/CIRGenModule.cpp
index 228d625ff4747..299ffe2ffb5d1 100644
--- a/clang/lib/CIR/CodeGen/CIRGenModule.cpp
+++ b/clang/lib/CIR/CodeGen/CIRGenModule.cpp
@@ -1714,6 +1714,17 @@ void CIRGenModule::emitExplicitCastExprType(const ExplicitCastExpr *e,
"emitExplicitCastExprType");
}
+mlir::TypedAttr CIRGenModule::emitNullMemberAttr(QualType destTy,
+ const MemberPointerType *mpt) {
+ if (mpt->isMemberFunctionPointerType()) {
+ auto ty = mlir::cast<cir::MethodType>(convertType(destTy));
+ return builder.getNullMethodAttr(ty);
+ }
+
+ auto ty = mlir::cast<cir::DataMemberType>(convertType(destTy));
+ return builder.getNullDataMemberAttr(ty);
+}
+
mlir::Value CIRGenModule::emitMemberPointerConstant(const UnaryOperator *e) {
assert(!cir::MissingFeatures::cxxABI());
diff --git a/clang/lib/CIR/CodeGen/CIRGenModule.h b/clang/lib/CIR/CodeGen/CIRGenModule.h
index bef154955b9b6..765a724e7150f 100644
--- a/clang/lib/CIR/CodeGen/CIRGenModule.h
+++ b/clang/lib/CIR/CodeGen/CIRGenModule.h
@@ -590,6 +590,9 @@ class CIRGenModule : public CIRGenTypeCache {
mlir::TypedAttr emitNullConstantForBase(const CXXRecordDecl *record);
mlir::Value emitMemberPointerConstant(const UnaryOperator *e);
+ /// Returns a null attribute to represent either a null method or null data
+ /// member, depending on the type of mpt.
+ mlir::TypedAttr emitNullMemberAttr(QualType t, const MemberPointerType *mpt);
llvm::StringRef getMangledName(clang::GlobalDecl gd);
// This function is to support the OpenACC 'bind' clause, which names an
More information about the cfe-commits
mailing list