[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