[clang] [clang][CGObjC] Sign the v-table pointer in ObjC exception RTTI. (PR #135562)
John McCall via cfe-commits
cfe-commits at lists.llvm.org
Tue Jun 3 10:05:50 PDT 2025
================
@@ -7676,10 +7676,26 @@ CGObjCNonFragileABIMac::GetInterfaceEHType(const ObjCInterfaceDecl *ID,
}
llvm::Value *VTableIdx = llvm::ConstantInt::get(CGM.Int32Ty, 2);
+ llvm::Constant *VTablePtr = llvm::ConstantExpr::getInBoundsGetElementPtr(
+ VTableGV->getValueType(), VTableGV, VTableIdx);
+
ConstantInitBuilder builder(CGM);
auto values = builder.beginStruct(ObjCTypes.EHTypeTy);
- values.add(llvm::ConstantExpr::getInBoundsGetElementPtr(
- VTableGV->getValueType(), VTableGV, VTableIdx));
+
+ if (auto &Schema =
+ CGM.getCodeGenOpts().PointerAuth.CXXTypeInfoVTablePointer) {
+ uint32_t discrimination = 0;
+ if (Schema.hasOtherDiscrimination()) {
+ assert(Schema.getOtherDiscrimination() ==
+ PointerAuthSchema::Discrimination::Constant);
+ discrimination = Schema.getConstantDiscrimination();
+ }
+ values.addSignedPointer(
+ VTablePtr, Schema.getKey(), Schema.isAddressDiscriminated(),
+ llvm::ConstantInt::get(CGM.IntPtrTy, discrimination));
----------------
rjmccall wrote:
I think you can just call the `addSignedPointer` variant that takes a schema and pass null values for the decl and type.
https://github.com/llvm/llvm-project/pull/135562
More information about the cfe-commits
mailing list