summaryrefslogtreecommitdiff
path: root/clang/lib/CodeGen/CGDecl.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'clang/lib/CodeGen/CGDecl.cpp')
-rw-r--r--clang/lib/CodeGen/CGDecl.cpp12
1 files changed, 9 insertions, 3 deletions
diff --git a/clang/lib/CodeGen/CGDecl.cpp b/clang/lib/CodeGen/CGDecl.cpp
index db8dbf86eca4..db34e2738b4c 100644
--- a/clang/lib/CodeGen/CGDecl.cpp
+++ b/clang/lib/CodeGen/CGDecl.cpp
@@ -776,11 +776,17 @@ void CodeGenFunction::EmitScalarInit(const Expr *init, const ValueDecl *D,
LValue lvalue, bool capturedByInit) {
Qualifiers::ObjCLifetime lifetime = lvalue.getObjCLifetime();
if (!lifetime) {
- llvm::Value *value = EmitScalarExpr(init);
+ llvm::Value *Value;
+ if (PointerAuthQualifier PtrAuth = lvalue.getQuals().getPointerAuth()) {
+ Value = EmitPointerAuthQualify(PtrAuth, init, lvalue.getAddress());
+ lvalue.getQuals().removePointerAuth();
+ } else {
+ Value = EmitScalarExpr(init);
+ }
if (capturedByInit)
drillIntoBlockVariable(*this, lvalue, cast<VarDecl>(D));
- EmitNullabilityCheck(lvalue, value, init->getExprLoc());
- EmitStoreThroughLValue(RValue::get(value), lvalue, true);
+ EmitNullabilityCheck(lvalue, Value, init->getExprLoc());
+ EmitStoreThroughLValue(RValue::get(Value), lvalue, true);
return;
}