================
@@ -121,20 +122,38 @@ CGPointerAuthInfo CodeGenFunction::EmitPointerAuthInfo(
   if (!Schema)
     return CGPointerAuthInfo();
 
-  llvm::Value *Discriminator =
-      CGM.getPointerAuthOtherDiscriminator(Schema, SchemaDecl, SchemaType);
+  llvm::ConstantInt *Discriminator =
+      Schema.getOtherDiscrimination() == 
PointerAuthSchema::Discrimination::None
+          ? nullptr
+          : CGM.getPointerAuthOtherDiscriminator(Schema, SchemaDecl,
+                                                 SchemaType);
+
+  return EmitPointerAuthInfo(Schema, StorageAddress, Discriminator);
+}
+
+CGPointerAuthInfo
+CodeGenFunction::EmitPointerAuthInfo(const PointerAuthSchema &Schema,
+                                     llvm::Value *StorageAddress,
+                                     llvm::ConstantInt *ExtraDiscriminator) {
+  if (!Schema)
+    return CGPointerAuthInfo();
 
+  PointerAuthSchema::Discrimination ExtraDiscKind =
+      Schema.getOtherDiscrimination();
+  assert(
+      (ExtraDiscKind == PointerAuthSchema::Discrimination::None ||
+       ExtraDiscriminator) &&
+      "extra discrimination is requested but no discriminator gets provided");
+
----------------
chbessonova wrote:

The assert is only there to ensure consistency between the schema and the 
provided arguments. Since we now rely on the schema to decide whether to emit 
`blend`, I think it's reasonable to assert that discriminator is present before 
using it.

https://github.com/llvm/llvm-project/pull/205808
_______________________________________________
cfe-commits mailing list
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to