]> granicus.if.org Git - clang/commitdiff
constexpr: fix typo resulting in move constructors sometimes not being
authorRichard Smith <richard-llvm@metafoo.co.uk>
Wed, 11 Jan 2012 18:26:05 +0000 (18:26 +0000)
committerRichard Smith <richard-llvm@metafoo.co.uk>
Wed, 11 Jan 2012 18:26:05 +0000 (18:26 +0000)
implicitly marked constexpr when they should be.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@147955 91177308-0d34-0410-b5e6-96231b3b80d8

lib/AST/DeclCXX.cpp
test/CXX/special/class.copy/p13-0x.cpp

index f56d4655beff3f6c026f3f55d1cc02b85197e85d..3094cd68fa048d6c457237a764db64c91bf00ab0 100644 (file)
@@ -243,7 +243,7 @@ CXXRecordDecl::setBases(CXXBaseSpecifier const * const *Bases,
         data().HasTrivialMoveAssignment = false;
 
       // C++11 [class.ctor]p6:
-      //   If that user-written default cosntructor would satisfy the
+      //   If that user-written default constructor would satisfy the
       //   requirements of a constexpr constructor, the implicitly-defined
       //   default constructor is constexpr.
       if (!BaseClassDecl->hasConstexprDefaultConstructor())
@@ -264,7 +264,7 @@ CXXRecordDecl::setBases(CXXBaseSpecifier const * const *Bases,
         // would be ill-formed, the implicit move constructor generated for the
         // derived class calls the base class' copy constructor.
         data().DefaultedMoveConstructorIsConstexpr &=
-          !BaseClassDecl->hasConstexprMoveConstructor();
+          BaseClassDecl->hasConstexprMoveConstructor();
       else if (!BaseClassDecl->hasConstexprCopyConstructor())
         data().DefaultedMoveConstructorIsConstexpr = false;
     }
index 30d8c6ebad8b9fa176f8a9e6654093ba5529ac6b..0a9aa6214594fff7c40f9a6757caa2e508c3dfe3 100644 (file)
@@ -53,3 +53,8 @@ constexpr NonConstexprDefault ncd = NonConstexprDefault(NonConstexprDefault(1));
 constexpr Constexpr4 c4a = { ncd };
 constexpr Constexpr4 c4b = Constexpr4(c4a);
 constexpr Constexpr4 c4c = Constexpr4(static_cast<Constexpr4&&>(const_cast<Constexpr4&>(c4b)));
+
+struct Constexpr5Base {};
+struct Constexpr5 : Constexpr5Base { constexpr Constexpr5() {} };
+constexpr Constexpr5 ce5move = Constexpr5();
+constexpr Constexpr5 ce5copy = ce5move;