================
@@ -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
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to