================
@@ -2209,6 +2209,18 @@ void CodeGenFunction::EmitStoreOfScalar(llvm::Value
*Value, Address Addr,
}
}
+ // When storing a pointer, perform address space cast if needed.
----------------
macurtis-amd wrote:
@efriedma-quic Thanks for looking at this. Did not realize that the types are
expected to match at this point.
Would just before to [the call to
`EmitStoreThroughLValue`](https://github.com/llvm/llvm-project/blob/460e9a883786c23197d064e71c810cb2a95f3564/clang/lib/CodeGen/CGDecl.cpp#L800)
in
[`CodeGenFunction::EmitScalarInit`](https://github.com/llvm/llvm-project/blob/460e9a883786c23197d064e71c810cb2a95f3564/clang/lib/CodeGen/CGDecl.cpp#L786)
be an appropriate place to do the cast if needed?
```
void CodeGenFunction::EmitScalarInit(const Expr *init, const ValueDecl *D,
LValue lvalue, bool capturedByInit) {
Qualifiers::ObjCLifetime lifetime = lvalue.getObjCLifetime();
if (!lifetime) {
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);
return;
}
```
https://github.com/llvm/llvm-project/pull/154380
_______________________________________________
cfe-commits mailing list
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits