[clang] [CIR] Inline trivial copy/move assignment at call sites (PR #198918)
Andy Kaylor via cfe-commits
cfe-commits at lists.llvm.org
Fri Jun 12 15:45:54 PDT 2026
================
@@ -901,6 +901,33 @@ void CIRGenFunction::emitImplicitAssignmentOperatorBody(FunctionArgList &args) {
assert(!cir::MissingFeatures::incrementProfileCounter());
assert(!cir::MissingFeatures::runCleanupsScope());
+ // For a memcpy-equivalent special member (a union, or a trivially-copyable
+ // record) the synthesized body either copies nothing -- a union body is just
+ // `return *this` -- or relies on a memcpy the AST does not spell out as
+ // field assignments. Mirror classic CodeGen's AssignmentMemcpyizer: copy
+ // the whole object once, then fall through to emit the trailing
+ // `return *this`. Emitting the copy but skipping the return would leave the
+ // result reference uninitialized.
----------------
andykaylor wrote:
```suggestion
// For a memcpy-equivalent assignment operator, copy the whole object,
// then fall through to emit the trailing `return *this`.
```
https://github.com/llvm/llvm-project/pull/198918
More information about the cfe-commits
mailing list