[all-commits] [llvm/llvm-project] 5ea341: [clang] Fix trivially copyable for copy constructo...
Javier Alvarez via All-commits
all-commits at lists.llvm.org
Fri Jun 17 00:36:33 PDT 2022
Branch: refs/heads/main
Home: https://github.com/llvm/llvm-project
Commit: 5ea341d7c4f9cc4933adc04ff74d59e26ad2f306
https://github.com/llvm/llvm-project/commit/5ea341d7c4f9cc4933adc04ff74d59e26ad2f306
Author: Javier Alvarez <javier.alvarez at allthingsembedded.net>
Date: 2022-06-17 (Fri, 17 Jun 2022)
Changed paths:
M clang-tools-extra/test/clang-tidy/checkers/modernize-loop-convert-const.cpp
M clang/docs/ReleaseNotes.rst
M clang/include/clang/Basic/LangOptions.h
M clang/lib/Sema/SemaDeclCXX.cpp
M clang/test/CXX/drs/dr21xx.cpp
M clang/test/CXX/special/class.copy/p12-0x.cpp
M clang/test/CXX/special/class.copy/p25-0x.cpp
M clang/www/cxx_dr_status.html
Log Message:
-----------
[clang] Fix trivially copyable for copy constructor and copy assignment operator
>From [class.copy.ctor]:
```
A non-template constructor for class X is a copy constructor if its first
parameter is of type X&, const X&, volatile X& or const volatile X&, and
either there are no other parameters or else all other parameters have
default arguments (9.3.4.7).
A copy/move constructor for class X is trivial if it is not user-provided and if:
- class X has no virtual functions (11.7.3) and no virtual base classes (11.7.2), and
- the constructor selected to copy/move each direct base class subobject is trivial, and
- or each non-static data member of X that is of class type (or array thereof),
the constructor selected to copy/move that member is trivial;
otherwise the copy/move constructor is non-trivial.
```
So `T(T&) = default`; should be trivial assuming that the previous
provisions are met.
This works in GCC, but not in Clang at the moment:
https://godbolt.org/z/fTGe71b6P
Reviewed By: royjacobson
Differential Revision: https://reviews.llvm.org/D127593
More information about the All-commits
mailing list