summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--lib/AST/DeclCXX.cpp4
-rw-r--r--test/CXX/special/class.copy/p13-0x.cpp5
2 files changed, 7 insertions, 2 deletions
diff --git a/lib/AST/DeclCXX.cpp b/lib/AST/DeclCXX.cpp
index f56d4655be..3094cd68fa 100644
--- a/lib/AST/DeclCXX.cpp
+++ b/lib/AST/DeclCXX.cpp
@@ -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;
}
diff --git a/test/CXX/special/class.copy/p13-0x.cpp b/test/CXX/special/class.copy/p13-0x.cpp
index 30d8c6ebad..0a9aa62145 100644
--- a/test/CXX/special/class.copy/p13-0x.cpp
+++ b/test/CXX/special/class.copy/p13-0x.cpp
@@ -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;