[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
  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 (

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:

Reviewed By: royjacobson

Differential Revision: https://reviews.llvm.org/D127593

More information about the All-commits mailing list