================
@@ -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