================ @@ -2419,8 +2419,13 @@ Value *ScalarExprEmitter::VisitCastExpr(CastExpr *CE) { return Visit(const_cast<Expr*>(E)); case CK_NoOp: { - return CE->changesVolatileQualification() ? EmitLoadOfLValue(CE) - : Visit(const_cast<Expr *>(E)); + if (CE->changesVolatileQualification()) + return EmitLoadOfLValue(CE); + auto V = Visit(const_cast<Expr *>(E)); + if (CGF.CGM.getCodeGenOpts().PointerAuth.CXXMemberFunctionPointers && + CE->getType()->isMemberFunctionPointerType()) + V = CGF.CGM.getCXXABI().EmitMemberPointerConversion(CGF, CE, V); + return V; ---------------- rjmccall wrote:
Okay, but that's coincidental, right? The language doesn't semantically guarantee that that conversion is a no-op, it just happens to be under normal conditions, even with function pointer type diversity enabled. What cast kind do we use if you cast a function pointer to a completely different type? https://github.com/llvm/llvm-project/pull/109056 _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits