================ @@ -580,6 +589,20 @@ BuiltinTypeMethodBuilder &BuiltinTypeMethodBuilder::returnValue(T ReturnValue) { Expr *ReturnValueExpr = convertPlaceholder(ReturnValue); ASTContext &AST = DeclBuilder.SemaRef.getASTContext(); + + QualType Ty = ReturnValueExpr->getType(); + if (Ty->isRecordType()) { + // For record types, create a call to copy constructor to ensure proper copy + // semantics. + auto *ICE = + ImplicitCastExpr::Create(AST, Ty.withConst(), CK_NoOp, ReturnValueExpr, + nullptr, VK_XValue, FPOptionsOverride()); + CXXConstructorDecl *CD = lookupCopyConstructor(Ty); + assert(CD && "no copy constructor found"); + ReturnValueExpr = CXXConstructExpr::Create( + AST, Ty, SourceLocation(), CD, false, {ICE}, false, false, false, false, ---------------- farzonl wrote:
could we comment these false cases with the param names so its clear what we are setting to false. example `/*param*/ false` https://github.com/llvm/llvm-project/pull/156544 _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits