diff options
author | Richard Smith <richard-llvm@metafoo.co.uk> | 2011-10-06 09:21:12 +0000 |
---|---|---|
committer | Richard Smith <richard-llvm@metafoo.co.uk> | 2011-10-06 09:21:12 +0000 |
commit | 43a87fe86aacc9808350a59fb15c353d19f29036 (patch) | |
tree | 8da5aef63c9204c5b90e4b5f510c340a5f2b6138 /clang/lib | |
parent | 2e657ffd8e219c8521098944a7f6f7d91bc2d903 (diff) | |
download | bcm5719-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.cpp | 15 |
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; } |