================ @@ -1533,9 +1533,17 @@ void CodeGenFunction::EmitReturnStmt(const ReturnStmt &S) { Builder.CreateStore(Result.getScalarVal(), ReturnValue); } else { switch (getEvaluationKind(RV->getType())) { - case TEK_Scalar: - Builder.CreateStore(EmitScalarExpr(RV), ReturnValue); - break; + case TEK_Scalar: { + llvm::Value *Ret = EmitScalarExpr(RV); + // EmitStoreOfScalar could be used here, but it extends bool which for + // some targets is returned as i1 zeroext. ---------------- Fznamznon wrote:
> So there's a trade-off here: we can unconditionally treat ReturnValue as > having the for-memory type (at the cost of emitting some extra > promotions/truncations), or we can track whether we were passed it vs. just > allocated internally to this function (at the cost of compiler complexity > around most uses of ReturnValue, which is a relatively small amount of code). Isn't the latter happening now? https://github.com/llvm/llvm-project/pull/91364 _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits