[llvm-branch-commits] [clang] [clang] Define ptrauth_sign_constant builtin. (PR #93904)

Ahmed Bougacha via llvm-branch-commits llvm-branch-commits at lists.llvm.org
Mon Jun 3 15:01:35 PDT 2024


================
@@ -2126,14 +2219,16 @@ static ExprResult PointerAuthSignGenericData(Sema &S, CallExpr *Call) {
 }
 
 static ExprResult PointerAuthSignOrAuth(Sema &S, CallExpr *Call,
-                                        PointerAuthOpKind OpKind) {
+                                        PointerAuthOpKind OpKind,
+                                        bool RequireConstant) {
   if (S.checkArgCount(Call, 3))
     return ExprError();
   if (checkPointerAuthEnabled(S, Call))
     return ExprError();
-  if (checkPointerAuthValue(S, Call->getArgs()[0], OpKind) ||
+  if (checkPointerAuthValue(S, Call->getArgs()[0], OpKind, RequireConstant) ||
----------------
ahmedbougacha wrote:

This one is actually interesting: we can't do that as-is, because the helper functions take an `Expr *&`, to do type conversion and placeholder expansion in-place;  see e.g., `convertArgumentToType`.
Another existing user makes the modification explicit using a local and `setArg`, but we have a lot of these calls in the checking code here.

We can rename the helper to something explicit though, perhaps `checkAndConvertPointerAuthValue`, and pass the call expr and arg index separately (same for key etc.)

https://github.com/llvm/llvm-project/pull/93904


More information about the llvm-branch-commits mailing list