]> granicus.if.org Git - clang/commit
Begin tracking trivialness of move constructors and move assignment
authorChandler Carruth <chandlerc@gmail.com>
Sat, 23 Apr 2011 23:10:33 +0000 (23:10 +0000)
committerChandler Carruth <chandlerc@gmail.com>
Sat, 23 Apr 2011 23:10:33 +0000 (23:10 +0000)
commit4d6e5a22d9481bb83b82d911727540096d171c0b
treef949238cb6c06ef7eec4f6e7949b78376453d480
parentc69f636a32485b64d571490e3980463dd7752aaa
Begin tracking trivialness of move constructors and move assignment
operators in C++ record declarations.

This patch starts off by updating a bunch of the standard citations to
refer to the draft 0x standard so that the semantics intended for move
varianst is clear. Where necessary these are duplicated so they'll be
available in doxygen.

It adds bit fields to keep track of the state for the move constructs,
and updates all the code necessary to track this state (I think) as
members are declared for a class. It also wires the state into the
various trait-like accessors in the AST's API, and tests that the type
trait expressions now behave correctly in the presence of move
constructors and move assignment operators.

This isn't complete yet due to these glaring FIXMEs:
1) No synthesis of implicit move constructors or assignment operators.
2) I don't think we correctly enforce the new logic for both copy and
   move trivial checks: that the *selected* copy/move
   constructor/operator is trivial. Currently this requires *all* of them
   to be trivial.
3) Some of the trait logic needs to be folded into the fine-grained
   trivial bits to more closely match the wording of the standard. For
   example, many of the places we currently set a bit to track POD-ness
   could be removed by querying other more fine grained traits on
   demand.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@130076 91177308-0d34-0410-b5e6-96231b3b80d8
include/clang/AST/DeclCXX.h
lib/AST/DeclCXX.cpp
lib/Serialization/ASTReaderDecl.cpp
lib/Serialization/ASTWriter.cpp
test/SemaCXX/type-traits.cpp