[cfe-commits] r131087 - in /cfe/trunk: include/clang/AST/DeclCXX.h include/clang/Basic/TypeTraits.h lib/AST/ASTContext.cpp lib/AST/DeclCXX.cpp lib/AST/StmtPrinter.cpp lib/AST/Type.cpp lib/CodeGen/CGExprAgg.cpp lib/CodeGen/CGExprCXX.cpp lib/CodeGen/CGObjC.cpp lib/Parse/ParseExprCXX.cpp lib/Sema/SemaDecl.cpp lib/Sema/SemaDeclCXX.cpp lib/Sema/SemaExpr.cpp lib/Sema/SemaExprCXX.cpp lib/Sema/SemaInit.cpp lib/Serialization/ASTReaderDecl.cpp lib/Serialization/ASTWriter.cpp
Douglas Gregor
dgregor at apple.com
Mon May 9 14:13:16 PDT 2011
Sean,
This broke
test/CodeGenCXX/copy-constructor-synthesis.cpp
for me. Can you look into it?
- Doug
On May 9, 2011, at 11:22 AM, Sean Hunt wrote:
> Author: coppro
> Date: Mon May 9 13:22:59 2011
> New Revision: 131087
>
> URL: http://llvm.org/viewvc/llvm-project?rev=131087&view=rev
> Log:
> Rename "hasTrivialConstructor" to "hasTrivialDefaultConstructor" and
> modify the semantics slightly to accomodate default constructors (I
> hope).
>
> Modified:
> cfe/trunk/include/clang/AST/DeclCXX.h
> cfe/trunk/include/clang/Basic/TypeTraits.h
> cfe/trunk/lib/AST/ASTContext.cpp
> cfe/trunk/lib/AST/DeclCXX.cpp
> cfe/trunk/lib/AST/StmtPrinter.cpp
> cfe/trunk/lib/AST/Type.cpp
> cfe/trunk/lib/CodeGen/CGExprAgg.cpp
> cfe/trunk/lib/CodeGen/CGExprCXX.cpp
> cfe/trunk/lib/CodeGen/CGObjC.cpp
> cfe/trunk/lib/Parse/ParseExprCXX.cpp
> cfe/trunk/lib/Sema/SemaDecl.cpp
> cfe/trunk/lib/Sema/SemaDeclCXX.cpp
> cfe/trunk/lib/Sema/SemaExpr.cpp
> cfe/trunk/lib/Sema/SemaExprCXX.cpp
> cfe/trunk/lib/Sema/SemaInit.cpp
> cfe/trunk/lib/Serialization/ASTReaderDecl.cpp
> cfe/trunk/lib/Serialization/ASTWriter.cpp
>
> Modified: cfe/trunk/include/clang/AST/DeclCXX.h
> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/AST/DeclCXX.h?rev=131087&r1=131086&r2=131087&view=diff
> ==============================================================================
> --- cfe/trunk/include/clang/AST/DeclCXX.h (original)
> +++ cfe/trunk/include/clang/AST/DeclCXX.h Mon May 9 13:22:59 2011
> @@ -337,15 +337,21 @@
> /// HasPublicFields - True when there are private non-static data members.
> bool HasPublicFields : 1;
>
> - /// HasTrivialConstructor - True when this class has a trivial constructor.
> + /// HasTrivialDefaultConstructor - True when this class has a trivial
> + /// default constructor.
> ///
> - /// C++ [class.ctor]p5. A constructor is trivial if it is an
> - /// implicitly-declared default constructor and if:
> - /// * its class has no virtual functions and no virtual base classes, and
> - /// * all the direct base classes of its class have trivial constructors, and
> - /// * for all the nonstatic data members of its class that are of class type
> - /// (or array thereof), each such class has a trivial constructor.
> - bool HasTrivialConstructor : 1;
> + /// C++0x [class.ctor]p5
> + /// A default constructor is trivial if it is not user-provided and if
> + /// -- its class has no virtual functions and no virtual base classes,
> + /// and
> + /// -- no non-static data member of its class has a
> + /// brace-or-equal-initializer, and
> + /// -- all the direct base classes of its class have trivial
> + /// default constructors, and
> + /// -- for all the nonstatic data members of its class that are of class
> + /// type (or array thereof), each such class has a trivial
> + /// default constructor.
> + bool HasTrivialDefaultConstructor : 1;
>
> /// HasConstExprNonCopyMoveConstructor - True when this class has at least
> /// one constexpr constructor which is neither the copy nor move
> @@ -357,7 +363,7 @@
> ///
> /// C++0x [class.copy]p13:
> /// A copy/move constructor for class X is trivial if it is neither
> - /// user-provided nor deleted and if
> + /// user-provided and if
> /// -- class X has no virtual functions and no virtual base classes, and
> /// -- the constructor selected to copy/move each direct base class
> /// subobject is trivial, and
> @@ -372,7 +378,7 @@
> ///
> /// C++0x [class.copy]p13:
> /// A copy/move constructor for class X is trivial if it is neither
> - /// user-provided nor deleted and if
> + /// user-provided and if
> /// -- class X has no virtual functions and no virtual base classes, and
> /// -- the constructor selected to copy/move each direct base class
> /// subobject is trivial, and
> @@ -800,9 +806,12 @@
> /// (C++ [class]p7)
> bool isStandardLayout() const { return data().IsStandardLayout; }
>
> - // hasTrivialConstructor - Whether this class has a trivial constructor
> - // (C++ [class.ctor]p5)
> - bool hasTrivialConstructor() const { return data().HasTrivialConstructor; }
> + // hasTrivialDefaultConstructor - Whether this class has a trivial default
> + // constructor
> + // (C++0x [class.ctor]p5)
> + bool hasTrivialDefaultConstructor() const {
> + return data().HasTrivialDefaultConstructor;
> + }
>
> // hasConstExprNonCopyMoveConstructor - Whether this class has at least one
> // constexpr constructor other than the copy or move constructors
> @@ -845,9 +854,18 @@
> }
>
> // isTriviallyCopyable - Whether this class is considered trivially copyable
> - // (C++0x [class]p5).
> + // (C++0x [class]p6).
> bool isTriviallyCopyable() const;
>
> + // isTrivial - Whether this class is considered trivial
> + //
> + // C++0x [class]p6
> + // A trivial class is a class that has a trivial default constructor and
> + // is trivially copiable.
> + bool isTrivial() const {
> + return isTriviallyCopyable() && hasTrivialDefaultConstructor();
> + }
> +
> /// \brief If this record is an instantiation of a member class,
> /// retrieves the member class from which it was instantiated.
> ///
>
> Modified: cfe/trunk/include/clang/Basic/TypeTraits.h
> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/Basic/TypeTraits.h?rev=131087&r1=131086&r2=131087&view=diff
> ==============================================================================
> --- cfe/trunk/include/clang/Basic/TypeTraits.h (original)
> +++ cfe/trunk/include/clang/Basic/TypeTraits.h Mon May 9 13:22:59 2011
> @@ -23,7 +23,7 @@
> UTT_HasNothrowConstructor,
> UTT_HasTrivialAssign,
> UTT_HasTrivialCopy,
> - UTT_HasTrivialConstructor,
> + UTT_HasTrivialDefaultConstructor,
> UTT_HasTrivialDestructor,
> UTT_HasVirtualDestructor,
> UTT_IsAbstract,
>
> Modified: cfe/trunk/lib/AST/ASTContext.cpp
> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/AST/ASTContext.cpp?rev=131087&r1=131086&r2=131087&view=diff
> ==============================================================================
> --- cfe/trunk/lib/AST/ASTContext.cpp (original)
> +++ cfe/trunk/lib/AST/ASTContext.cpp Mon May 9 13:22:59 2011
> @@ -6149,10 +6149,13 @@
> // Structs that have non-trivial constructors or destructors are required.
>
> // FIXME: Handle references.
> + // FIXME: Be more selective about which constructors we care about.
> if (const RecordType *RT = VD->getType()->getAs<RecordType>()) {
> if (const CXXRecordDecl *RD = dyn_cast<CXXRecordDecl>(RT->getDecl())) {
> - if (RD->hasDefinition() &&
> - (!RD->hasTrivialConstructor() || !RD->hasTrivialDestructor()))
> + if (RD->hasDefinition() && !(RD->hasTrivialDefaultConstructor() &&
> + RD->hasTrivialCopyConstructor() &&
> + RD->hasTrivialMoveConstructor() &&
> + RD->hasTrivialDestructor()))
> return true;
> }
> }
>
> Modified: cfe/trunk/lib/AST/DeclCXX.cpp
> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/AST/DeclCXX.cpp?rev=131087&r1=131086&r2=131087&view=diff
> ==============================================================================
> --- cfe/trunk/lib/AST/DeclCXX.cpp (original)
> +++ cfe/trunk/lib/AST/DeclCXX.cpp Mon May 9 13:22:59 2011
> @@ -33,11 +33,11 @@
> Aggregate(true), PlainOldData(true), Empty(true), Polymorphic(false),
> Abstract(false), IsStandardLayout(true), HasNoNonEmptyBases(true),
> HasPrivateFields(false), HasProtectedFields(false), HasPublicFields(false),
> - HasTrivialConstructor(true), HasConstExprNonCopyMoveConstructor(false),
> - HasTrivialCopyConstructor(true), HasTrivialMoveConstructor(true),
> - HasTrivialCopyAssignment(true), HasTrivialMoveAssignment(true),
> - HasTrivialDestructor(true), HasNonLiteralTypeFieldsOrBases(false),
> - ComputedVisibleConversions(false),
> + HasTrivialDefaultConstructor(true),
> + HasConstExprNonCopyMoveConstructor(false), HasTrivialCopyConstructor(true),
> + HasTrivialMoveConstructor(true), HasTrivialCopyAssignment(true),
> + HasTrivialMoveAssignment(true), HasTrivialDestructor(true),
> + HasNonLiteralTypeFieldsOrBases(false), ComputedVisibleConversions(false),
> DeclaredDefaultConstructor(false), DeclaredCopyConstructor(false),
> DeclaredCopyAssignment(false), DeclaredDestructor(false),
> NumBases(0), NumVBases(0), Bases(), VBases(),
> @@ -165,8 +165,9 @@
> data().Empty = false;
>
> // C++ [class.ctor]p5:
> - // A constructor is trivial if its class has no virtual base classes.
> - data().HasTrivialConstructor = false;
> + // A default constructor is trivial [...] if:
> + // -- its class has [...] no virtual bases
> + data().HasTrivialDefaultConstructor = false;
>
> // C++0x [class.copy]p13:
> // A copy/move constructor for class X is trivial if it is neither
> @@ -188,10 +189,11 @@
> data().IsStandardLayout = false;
> } else {
> // C++ [class.ctor]p5:
> - // A constructor is trivial if all the direct base classes of its
> - // class have trivial constructors.
> - if (!BaseClassDecl->hasTrivialConstructor())
> - data().HasTrivialConstructor = false;
> + // A default constructor is trivial [...] if:
> + // -- all the direct base classes of its class have trivial default
> + // constructors.
> + if (!BaseClassDecl->hasTrivialDefaultConstructor())
> + data().HasTrivialDefaultConstructor = false;
>
> // C++0x [class.copy]p13:
> // A copy/move constructor for class X is trivial if [...]
> @@ -421,8 +423,10 @@
> // polymorphic class.
> data().Polymorphic = true;
>
> - // None of the special member functions are trivial.
> - data().HasTrivialConstructor = false;
> + // C++0x [class.ctor]p5
> + // A default constructor is trivial [...] if:
> + // -- its class has no virtual functions [...]
> + data().HasTrivialDefaultConstructor = false;
>
> // C++0x [class.copy]p13:
> // A copy/move constructor for class X is trivial if [...]
> @@ -497,11 +501,10 @@
> // A POD-struct is an aggregate class [...]
> data().PlainOldData = false;
>
> - // C++ [class.ctor]p5:
> - // A constructor is trivial if it is an implicitly-declared default
> - // constructor.
> - // FIXME: C++0x: don't do this for "= default" default constructors.
> - data().HasTrivialConstructor = false;
> + // C++0x [class.ctor]p5:
> + // A default constructor is trivial if it is not user-provided [...]
> + if (Constructor->isUserProvided())
> + data().HasTrivialDefaultConstructor = false;
>
> // Note when we have a user-declared copy or move constructor, which will
> // suppress the implicit declaration of those constructors.
> @@ -511,16 +514,16 @@
> data().DeclaredCopyConstructor = true;
>
> // C++0x [class.copy]p13:
> - // A copy/move constructor for class X is trivial if it is neither
> - // user-provided nor deleted
> - // FIXME: C++0x: don't do this for "= default" copy constructors.
> - data().HasTrivialCopyConstructor = false;
> + // A copy/move constructor for class X is trivial if it is not
> + // user-provided [...]
> + if (Constructor->isUserProvided())
> + data().HasTrivialCopyConstructor = false;
> } else if (Constructor->isMoveConstructor()) {
> // C++0x [class.copy]p13:
> - // A copy/move constructor for class X is trivial if it is neither
> - // user-provided nor deleted
> - // FIXME: C++0x: don't do this for "= default" move constructors.
> - data().HasTrivialMoveConstructor = false;
> + // A copy/move constructor for class X is trivial if it is not
> + // user-provided [...]
> + if (Constructor->isUserProvided())
> + data().HasTrivialMoveConstructor = false;
> }
> }
> if (Constructor->isConstExpr() &&
> @@ -676,7 +679,7 @@
> if (!T->isPODType())
> data().PlainOldData = false;
> if (T->isReferenceType()) {
> - data().HasTrivialConstructor = false;
> + data().HasTrivialDefaultConstructor = false;
>
> // C++0x [class]p7:
> // A standard-layout class is a class that:
> @@ -691,8 +694,13 @@
> if (const RecordType *RecordTy = T->getAs<RecordType>()) {
> CXXRecordDecl* FieldRec = cast<CXXRecordDecl>(RecordTy->getDecl());
> if (FieldRec->getDefinition()) {
> - if (!FieldRec->hasTrivialConstructor())
> - data().HasTrivialConstructor = false;
> + // C++0x [class.ctor]p5:
> + // A defulat constructor is trivial [...] if:
> + // -- for all the non-static data members of its class that are of
> + // class type (or array thereof), each such class has a trivial
> + // default constructor.
> + if (!FieldRec->hasTrivialDefaultConstructor())
> + data().HasTrivialDefaultConstructor = false;
>
> // C++0x [class.copy]p13:
> // A copy/move constructor for class X is trivial if [...]
>
> Modified: cfe/trunk/lib/AST/StmtPrinter.cpp
> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/AST/StmtPrinter.cpp?rev=131087&r1=131086&r2=131087&view=diff
> ==============================================================================
> --- cfe/trunk/lib/AST/StmtPrinter.cpp (original)
> +++ cfe/trunk/lib/AST/StmtPrinter.cpp Mon May 9 13:22:59 2011
> @@ -1297,7 +1297,7 @@
> case UTT_HasNothrowConstructor: return "__has_nothrow_constructor";
> case UTT_HasNothrowCopy: return "__has_nothrow_copy";
> case UTT_HasTrivialAssign: return "__has_trivial_assign";
> - case UTT_HasTrivialConstructor: return "__has_trivial_constructor";
> + case UTT_HasTrivialDefaultConstructor: return "__has_trivial_constructor";
> case UTT_HasTrivialCopy: return "__has_trivial_copy";
> case UTT_HasTrivialDestructor: return "__has_trivial_destructor";
> case UTT_HasVirtualDestructor: return "__has_virtual_destructor";
>
> Modified: cfe/trunk/lib/AST/Type.cpp
> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/AST/Type.cpp?rev=131087&r1=131086&r2=131087&view=diff
> ==============================================================================
> --- cfe/trunk/lib/AST/Type.cpp (original)
> +++ cfe/trunk/lib/AST/Type.cpp Mon May 9 13:22:59 2011
> @@ -954,11 +954,7 @@
> if (const RecordType *RT = BaseTy->getAs<RecordType>()) {
> if (const CXXRecordDecl *ClassDecl =
> dyn_cast<CXXRecordDecl>(RT->getDecl())) {
> - // C++0x [class]p5:
> - // A trivial class is a class that has a trivial default constructor
> - if (!ClassDecl->hasTrivialConstructor()) return false;
> - // and is trivially copyable.
> - if (!ClassDecl->isTriviallyCopyable()) return false;
> + if (!ClassDecl->isTrivial()) return false;
> }
>
> return true;
> @@ -1027,11 +1023,7 @@
> dyn_cast<CXXRecordDecl>(RT->getDecl())) {
> // C++11 [class]p10:
> // A POD struct is a non-union class that is both a trivial class [...]
> - // C++11 [class]p5:
> - // A trivial class is a class that has a trivial default constructor
> - if (!ClassDecl->hasTrivialConstructor()) return false;
> - // and is trivially copyable.
> - if (!ClassDecl->isTriviallyCopyable()) return false;
> + if (!ClassDecl->isTrivial()) return false;
>
> // C++11 [class]p10:
> // A POD struct is a non-union class that is both a trivial class and
>
> Modified: cfe/trunk/lib/CodeGen/CGExprAgg.cpp
> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/CodeGen/CGExprAgg.cpp?rev=131087&r1=131086&r2=131087&view=diff
> ==============================================================================
> --- cfe/trunk/lib/CodeGen/CGExprAgg.cpp (original)
> +++ cfe/trunk/lib/CodeGen/CGExprAgg.cpp Mon May 9 13:22:59 2011
> @@ -642,7 +642,7 @@
> if (const RecordType *RT = CGF.getContext()
> .getBaseElementType(ElementType)->getAs<RecordType>()) {
> const CXXRecordDecl *RD = cast<CXXRecordDecl>(RT->getDecl());
> - hasNonTrivialCXXConstructor = !RD->hasTrivialConstructor();
> + hasNonTrivialCXXConstructor = !RD->hasTrivialDefaultConstructor();
> }
>
> // FIXME: were we intentionally ignoring address spaces and GC attributes?
>
> Modified: cfe/trunk/lib/CodeGen/CGExprCXX.cpp
> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/CodeGen/CGExprCXX.cpp?rev=131087&r1=131086&r2=131087&view=diff
> ==============================================================================
> --- cfe/trunk/lib/CodeGen/CGExprCXX.cpp (original)
> +++ cfe/trunk/lib/CodeGen/CGExprCXX.cpp Mon May 9 13:22:59 2011
> @@ -738,7 +738,7 @@
> if (E->isArray()) {
> if (CXXConstructorDecl *Ctor = E->getConstructor()) {
> bool RequiresZeroInitialization = false;
> - if (Ctor->getParent()->hasTrivialConstructor()) {
> + if (Ctor->getParent()->hasTrivialDefaultConstructor()) {
> // If new expression did not specify value-initialization, then there
> // is no initialization.
> if (!E->hasInitializer() || Ctor->getParent()->isEmpty())
>
> Modified: cfe/trunk/lib/CodeGen/CGObjC.cpp
> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/CodeGen/CGObjC.cpp?rev=131087&r1=131086&r2=131087&view=diff
> ==============================================================================
> --- cfe/trunk/lib/CodeGen/CGObjC.cpp (original)
> +++ cfe/trunk/lib/CodeGen/CGObjC.cpp Mon May 9 13:22:59 2011
> @@ -292,7 +292,7 @@
> const CXXRecordDecl *classDecl = IVART->getAsCXXRecordDecl();
>
> if (PID->getGetterCXXConstructor() &&
> - classDecl && !classDecl->hasTrivialConstructor()) {
> + classDecl && !classDecl->hasTrivialDefaultConstructor()) {
> ReturnStmt *Stmt =
> new (getContext()) ReturnStmt(SourceLocation(),
> PID->getGetterCXXConstructor(),
>
> Modified: cfe/trunk/lib/Parse/ParseExprCXX.cpp
> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Parse/ParseExprCXX.cpp?rev=131087&r1=131086&r2=131087&view=diff
> ==============================================================================
> --- cfe/trunk/lib/Parse/ParseExprCXX.cpp (original)
> +++ cfe/trunk/lib/Parse/ParseExprCXX.cpp Mon May 9 13:22:59 2011
> @@ -1924,7 +1924,8 @@
> case tok::kw___has_nothrow_constructor: return UTT_HasNothrowConstructor;
> case tok::kw___has_nothrow_copy: return UTT_HasNothrowCopy;
> case tok::kw___has_trivial_assign: return UTT_HasTrivialAssign;
> - case tok::kw___has_trivial_constructor: return UTT_HasTrivialConstructor;
> + case tok::kw___has_trivial_constructor:
> + return UTT_HasTrivialDefaultConstructor;
> case tok::kw___has_trivial_copy: return UTT_HasTrivialCopy;
> case tok::kw___has_trivial_destructor: return UTT_HasTrivialDestructor;
> case tok::kw___has_virtual_destructor: return UTT_HasVirtualDestructor;
>
> Modified: cfe/trunk/lib/Sema/SemaDecl.cpp
> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Sema/SemaDecl.cpp?rev=131087&r1=131086&r2=131087&view=diff
> ==============================================================================
> --- cfe/trunk/lib/Sema/SemaDecl.cpp (original)
> +++ cfe/trunk/lib/Sema/SemaDecl.cpp Mon May 9 13:22:59 2011
> @@ -7653,7 +7653,7 @@
> CXXSpecialMember member = CXXInvalid;
> if (!RDecl->hasTrivialCopyConstructor())
> member = CXXCopyConstructor;
> - else if (!RDecl->hasTrivialConstructor())
> + else if (!RDecl->hasTrivialDefaultConstructor())
> member = CXXConstructor;
> else if (!RDecl->hasTrivialCopyAssignment())
> member = CXXCopyAssignment;
> @@ -7758,7 +7758,7 @@
> bool (CXXRecordDecl::*hasTrivial)() const;
> switch (member) {
> case CXXConstructor:
> - hasTrivial = &CXXRecordDecl::hasTrivialConstructor; break;
> + hasTrivial = &CXXRecordDecl::hasTrivialDefaultConstructor; break;
> case CXXCopyConstructor:
> hasTrivial = &CXXRecordDecl::hasTrivialCopyConstructor; break;
> case CXXCopyAssignment:
>
> Modified: cfe/trunk/lib/Sema/SemaDeclCXX.cpp
> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Sema/SemaDeclCXX.cpp?rev=131087&r1=131086&r2=131087&view=diff
> ==============================================================================
> --- cfe/trunk/lib/Sema/SemaDeclCXX.cpp (original)
> +++ cfe/trunk/lib/Sema/SemaDeclCXX.cpp Mon May 9 13:22:59 2011
> @@ -5065,7 +5065,7 @@
> /*isImplicitlyDeclared=*/true);
> DefaultCon->setAccess(AS_public);
> DefaultCon->setImplicit();
> - DefaultCon->setTrivial(ClassDecl->hasTrivialConstructor());
> + DefaultCon->setTrivial(ClassDecl->hasTrivialDefaultConstructor());
>
> // Note that we have declared this constructor.
> ++ASTContext::NumImplicitDefaultConstructorsDeclared;
>
> Modified: cfe/trunk/lib/Sema/SemaExpr.cpp
> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Sema/SemaExpr.cpp?rev=131087&r1=131086&r2=131087&view=diff
> ==============================================================================
> --- cfe/trunk/lib/Sema/SemaExpr.cpp (original)
> +++ cfe/trunk/lib/Sema/SemaExpr.cpp Mon May 9 13:22:59 2011
> @@ -9854,7 +9854,7 @@
> if (CXXConstructorDecl *Constructor = dyn_cast<CXXConstructorDecl>(D)) {
> unsigned TypeQuals;
> if (Constructor->isImplicit() && Constructor->isDefaultConstructor()) {
> - if (Constructor->getParent()->hasTrivialConstructor())
> + if (Constructor->getParent()->hasTrivialDefaultConstructor())
> return;
> if (!Constructor->isUsed(false))
> DefineImplicitDefaultConstructor(Loc, Constructor);
>
> Modified: cfe/trunk/lib/Sema/SemaExprCXX.cpp
> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Sema/SemaExprCXX.cpp?rev=131087&r1=131086&r2=131087&view=diff
> ==============================================================================
> --- cfe/trunk/lib/Sema/SemaExprCXX.cpp (original)
> +++ cfe/trunk/lib/Sema/SemaExprCXX.cpp Mon May 9 13:22:59 2011
> @@ -2434,7 +2434,7 @@
> case UTT_HasNothrowConstructor:
> case UTT_HasNothrowCopy:
> case UTT_HasTrivialAssign:
> - case UTT_HasTrivialConstructor:
> + case UTT_HasTrivialDefaultConstructor:
> case UTT_HasTrivialCopy:
> case UTT_HasTrivialDestructor:
> case UTT_HasVirtualDestructor:
> @@ -2544,7 +2544,7 @@
> //
> // 1: http://gcc.gnu/.org/onlinedocs/gcc/Type-Traits.html
> // 2: http://docwiki.embarcadero.com/RADStudio/XE/en/Type_Trait_Functions_(C%2B%2B0x)_Index
> - case UTT_HasTrivialConstructor:
> + case UTT_HasTrivialDefaultConstructor:
> // http://gcc.gnu.org/onlinedocs/gcc/Type-Traits.html:
> // If __is_pod (type) is true then the trait is true, else if type is
> // a cv class or union type (or array thereof) with a trivial default
> @@ -2553,7 +2553,7 @@
> return true;
> if (const RecordType *RT =
> C.getBaseElementType(T)->getAs<RecordType>())
> - return cast<CXXRecordDecl>(RT->getDecl())->hasTrivialConstructor();
> + return cast<CXXRecordDecl>(RT->getDecl())->hasTrivialDefaultConstructor();
> return false;
> case UTT_HasTrivialCopy:
> // http://gcc.gnu.org/onlinedocs/gcc/Type-Traits.html:
> @@ -2694,7 +2694,7 @@
> return true;
> if (const RecordType *RT = C.getBaseElementType(T)->getAs<RecordType>()) {
> CXXRecordDecl *RD = cast<CXXRecordDecl>(RT->getDecl());
> - if (RD->hasTrivialConstructor())
> + if (RD->hasTrivialDefaultConstructor())
> return true;
>
> DeclContext::lookup_const_iterator Con, ConEnd;
>
> Modified: cfe/trunk/lib/Sema/SemaInit.cpp
> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Sema/SemaInit.cpp?rev=131087&r1=131086&r2=131087&view=diff
> ==============================================================================
> --- cfe/trunk/lib/Sema/SemaInit.cpp (original)
> +++ cfe/trunk/lib/Sema/SemaInit.cpp Mon May 9 13:22:59 2011
> @@ -4020,7 +4020,8 @@
> CXXRecordDecl *ClassDecl = Constructor->getParent();
> assert(ClassDecl && "No parent class for constructor.");
> if (Constructor->isImplicit() && Constructor->isDefaultConstructor() &&
> - ClassDecl->hasTrivialConstructor() && !Constructor->isUsed(false))
> + ClassDecl->hasTrivialDefaultConstructor() &&
> + !Constructor->isUsed(false))
> S.DefineImplicitDefaultConstructor(Loc, Constructor);
> }
>
>
> Modified: cfe/trunk/lib/Serialization/ASTReaderDecl.cpp
> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Serialization/ASTReaderDecl.cpp?rev=131087&r1=131086&r2=131087&view=diff
> ==============================================================================
> --- cfe/trunk/lib/Serialization/ASTReaderDecl.cpp (original)
> +++ cfe/trunk/lib/Serialization/ASTReaderDecl.cpp Mon May 9 13:22:59 2011
> @@ -858,7 +858,7 @@
> Data.HasPrivateFields = Record[Idx++];
> Data.HasProtectedFields = Record[Idx++];
> Data.HasPublicFields = Record[Idx++];
> - Data.HasTrivialConstructor = Record[Idx++];
> + Data.HasTrivialDefaultConstructor = Record[Idx++];
> Data.HasConstExprNonCopyMoveConstructor = Record[Idx++];
> Data.HasTrivialCopyConstructor = Record[Idx++];
> Data.HasTrivialMoveConstructor = Record[Idx++];
>
> Modified: cfe/trunk/lib/Serialization/ASTWriter.cpp
> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Serialization/ASTWriter.cpp?rev=131087&r1=131086&r2=131087&view=diff
> ==============================================================================
> --- cfe/trunk/lib/Serialization/ASTWriter.cpp (original)
> +++ cfe/trunk/lib/Serialization/ASTWriter.cpp Mon May 9 13:22:59 2011
> @@ -3818,7 +3818,7 @@
> Record.push_back(Data.HasPrivateFields);
> Record.push_back(Data.HasProtectedFields);
> Record.push_back(Data.HasPublicFields);
> - Record.push_back(Data.HasTrivialConstructor);
> + Record.push_back(Data.HasTrivialDefaultConstructor);
> Record.push_back(Data.HasConstExprNonCopyMoveConstructor);
> Record.push_back(Data.HasTrivialCopyConstructor);
> Record.push_back(Data.HasTrivialMoveConstructor);
>
>
> _______________________________________________
> cfe-commits mailing list
> cfe-commits at cs.uiuc.edu
> http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits
More information about the cfe-commits
mailing list