================
@@ -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
_______________________________________________
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to