PR11067: A definition of a constexpr static variable doesn't need an initializer if the in-class declaration had one. Such a declaration must be initialized by a constant expression.

llvm-svn: 141279
diff --git a/clang/lib/Sema/SemaDecl.cpp b/clang/lib/Sema/SemaDecl.cpp
index 1974f30..718a19b 100644
--- a/clang/lib/Sema/SemaDecl.cpp
+++ b/clang/lib/Sema/SemaDecl.cpp
@@ -6032,15 +6032,12 @@
     // C++0x [class.static.data]p3: A static data member can be declared with
     // the constexpr specifier; if so, its declaration shall specify
     // a brace-or-equal-initializer.
-    if (Var->isConstexpr()) {
-      // FIXME: Provide fix-its to convert the constexpr to const.
-      if (Var->isStaticDataMember() && Var->getAnyInitializer()) {
-        Diag(Var->getLocation(), diag::err_constexpr_initialized_static_member)
-          << Var->getDeclName();
-      } else {
-        Diag(Var->getLocation(), diag::err_constexpr_var_requires_init)
-          << Var->getDeclName();
-      }
+    //
+    // A static data member's definition may inherit an initializer from an
+    // in-class declaration.
+    if (Var->isConstexpr() && !Var->getAnyInitializer()) {
+      Diag(Var->getLocation(), diag::err_constexpr_var_requires_init)
+        << Var->getDeclName();
       Var->setInvalidDecl();
       return;
     }