================
@@ -2220,6 +2220,11 @@ llvm::Constant 
*ConstantLValueEmitter::emitPointerAuthPointer(const Expr *E) {
 
   // The assertions here are all checked by Sema.
   assert(Result.Val.isLValue());
+  auto *Base = Result.Val.getLValueBase().get<const ValueDecl *>();
+  if (auto *Decl = dyn_cast_or_null<FunctionDecl>(Base)) {
+    assert(Result.Val.getLValueOffset().isZero());
+    return CGM.getRawFunctionPointer(Decl);
----------------
ahatanak wrote:

The checks in `SemaChecking.cpp` and the assertion in `emitPointerAuthPointer` 
ensure that the expression of the first argument to 
`__builtin_ptrauth_sign_constant` evaluates to an `LValue` with a `ValueDecl` 
base. With that restriction, a call to `emitAbstract` returns a signed pointer 
only when the argument points to a function definition (see 
`ConstantLValueEmitter::tryEmitBase`). Since we are special-casing functions 
here, the call to `emitAbstract` returns an unsigned pointer.

https://github.com/llvm/llvm-project/pull/96992
_______________________________________________
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to