summaryrefslogtreecommitdiffstats
path: root/clang/lib
diff options
context:
space:
mode:
authorRichard Smith <richard-llvm@metafoo.co.uk>2011-10-06 09:21:12 +0000
committerRichard Smith <richard-llvm@metafoo.co.uk>2011-10-06 09:21:12 +0000
commit43a87fe86aacc9808350a59fb15c353d19f29036 (patch)
tree8da5aef63c9204c5b90e4b5f510c340a5f2b6138 /clang/lib
parent2e657ffd8e219c8521098944a7f6f7d91bc2d903 (diff)
downloadbcm5719-llvm-43a87fe86aacc9808350a59fb15c353d19f29036.tar.gz
bcm5719-llvm-43a87fe86aacc9808350a59fb15c353d19f29036.zip
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
Diffstat (limited to 'clang/lib')
-rw-r--r--clang/lib/Sema/SemaDecl.cpp15
1 files changed, 6 insertions, 9 deletions
diff --git a/clang/lib/Sema/SemaDecl.cpp b/clang/lib/Sema/SemaDecl.cpp
index 1974f30b8e5..718a19b9880 100644
--- a/clang/lib/Sema/SemaDecl.cpp
+++ b/clang/lib/Sema/SemaDecl.cpp
@@ -6032,15 +6032,12 @@ void Sema::ActOnUninitializedDecl(Decl *RealDecl,
// 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;
}
OpenPOWER on IntegriCloud