================
@@ -2161,6 +2161,19 @@ static RValue EmitLoadOfMatrixLValue(LValue LV, 
SourceLocation Loc,
   return RValue::get(CGF.EmitLoadOfScalar(LV, Loc));
 }
 
+RValue CodeGenFunction::EmitLoadOfAnyValue(LValue LV, SourceLocation Loc) {
+  QualType Ty = LV.getType();
+  switch (getEvaluationKind(Ty)) {
+  case TEK_Scalar:
+    return EmitLoadOfLValue(LV, Loc);
+  case TEK_Complex:
+    return RValue::getComplex(EmitLoadOfComplex(LV, Loc));
+  case TEK_Aggregate:
+    return RValue::getAggregate(LV.getAddress());
----------------
rjmccall wrote:

I'm concerned about this laundering an l-value address into an aggregate 
r-value address.  If someone used this as a generic routine somewhere else in 
CodeGen, this could pretty easily cause subtle miscompiles.  Can we have the 
AggExprEmitter pass the `AggValueSlot` to `EmitVAArg` and so on, so that it 
eventually gets passed to this method?  And then this method can call 
`EmitAggFinalDestCopy`.


  It's probably okay for our existing use case here, though, where we're 

That might be okay for our specific use case here — we probably never mutate 
the aggregate slot we get back during aggregate expression evaluation, and the 
slot in the `va_list` should otherwise be 

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

Reply via email to