[clang] [CIR] Fix codegen for MemberPoint with nullptr value (PR #185309)
via cfe-commits
cfe-commits at lists.llvm.org
Sun Mar 8 11:14:28 PDT 2026
llvmbot wrote:
<!--LLVM PR SUMMARY COMMENT-->
@llvm/pr-subscribers-clang
Author: Amr Hesham (AmrDeveloper)
<details>
<summary>Changes</summary>
Fix codegen for the MemberPoint with a nullptr value
---
Full diff: https://github.com/llvm/llvm-project/pull/185309.diff
2 Files Affected:
- (modified) clang/lib/CIR/CodeGen/CIRGenExprConstant.cpp (+3)
- (modified) clang/test/CIR/CodeGen/pointer-to-data-member.cpp (+6)
``````````diff
diff --git a/clang/lib/CIR/CodeGen/CIRGenExprConstant.cpp b/clang/lib/CIR/CodeGen/CIRGenExprConstant.cpp
index b697ca5cd3f6d..338d64e323391 100644
--- a/clang/lib/CIR/CodeGen/CIRGenExprConstant.cpp
+++ b/clang/lib/CIR/CodeGen/CIRGenExprConstant.cpp
@@ -1897,6 +1897,9 @@ mlir::Attribute ConstantEmitter::tryEmitPrivate(const APValue &value,
assert(!cir::MissingFeatures::cxxABI());
const ValueDecl *memberDecl = value.getMemberPointerDecl();
+ if (!memberDecl)
+ return builder.getZeroInitAttr(cgm.convertType(destType));
+
if (value.isMemberPointerToDerivedMember()) {
cgm.errorNYI(
"ConstExprEmitter::tryEmitPrivate member pointer to derived member");
diff --git a/clang/test/CIR/CodeGen/pointer-to-data-member.cpp b/clang/test/CIR/CodeGen/pointer-to-data-member.cpp
index acb413a95ba8f..78af6cf5bb8e6 100644
--- a/clang/test/CIR/CodeGen/pointer-to-data-member.cpp
+++ b/clang/test/CIR/CodeGen/pointer-to-data-member.cpp
@@ -12,6 +12,12 @@ struct Point {
int z;
};
+int Point::*ptr_none = nullptr;
+// CIR-BEFORE: cir.global external @ptr_none = #cir.data_member<null> : !cir.data_member<!s32i in !rec_Point>
+// CIR-AFTER: cir.global external @ptr_none = #cir.int<-1> : !s64i
+// LLVM: @ptr_none = global i64 -1
+// OGCG: @ptr_none = global i64 -1
+
int Point::*pt_member = &Point::z;
// CIR-BEFORE: cir.global external @pt_member = #cir.data_member<2> : !cir.data_member<!s32i in !rec_Point>
// CIR-AFTER: cir.global external @pt_member = #cir.int<8> : !s64i
``````````
</details>
https://github.com/llvm/llvm-project/pull/185309
More information about the cfe-commits
mailing list