aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--lib/Sema/SemaDecl.cpp14
-rw-r--r--test/SemaCXX/cxx0x-class.cpp4
2 files changed, 11 insertions, 7 deletions
diff --git a/lib/Sema/SemaDecl.cpp b/lib/Sema/SemaDecl.cpp
index 33506401cf..702d38280a 100644
--- a/lib/Sema/SemaDecl.cpp
+++ b/lib/Sema/SemaDecl.cpp
@@ -7203,11 +7203,15 @@ void Sema::AddInitializerToDecl(Decl *RealDecl, Expr *Init,
// In C++98, this is a GNU extension. In C++11, it is not, but we support
// it anyway and provide a fixit to add the 'constexpr'.
if (getLangOpts().CPlusPlus11) {
- Diag(VDecl->getLocation(),
- diag::ext_in_class_initializer_float_type_cxx11)
- << DclT << Init->getSourceRange()
- << FixItHint::CreateInsertion(VDecl->getLocStart(), "constexpr ");
- VDecl->setConstexpr(true);
+ SemaDiagnosticBuilder D = Diag(VDecl->getLocation(),
+ diag::ext_in_class_initializer_float_type_cxx11);
+ D << DclT << Init->getSourceRange();
+ if (Diags.getDiagnosticLevel(diag::warn_initializer_out_of_order,
+ VDecl->getLocation()) >=
+ DiagnosticsEngine::Error) {
+ D << FixItHint::CreateInsertion(VDecl->getLocStart(), "constexpr ");
+ VDecl->setConstexpr(true);
+ }
} else {
Diag(VDecl->getLocation(), diag::ext_in_class_initializer_float_type)
<< DclT << Init->getSourceRange();
diff --git a/test/SemaCXX/cxx0x-class.cpp b/test/SemaCXX/cxx0x-class.cpp
index 5532bcea3e..4e0d5bc3d7 100644
--- a/test/SemaCXX/cxx0x-class.cpp
+++ b/test/SemaCXX/cxx0x-class.cpp
@@ -17,11 +17,11 @@ public:
};
namespace rdar8367341 {
- float foo(); // expected-note 2{{here}}
+ float foo(); // expected-note {{here}}
struct A {
static const float x = 5.0f; // expected-warning {{requires 'constexpr'}}
- static const float y = foo(); // expected-warning {{requires 'constexpr'}} expected-error {{constexpr variable 'y' must be initialized by a constant expression}} expected-note {{non-constexpr function 'foo'}}
+ static const float y = foo(); // expected-warning {{requires 'constexpr'}}
static constexpr float x2 = 5.0f;
static constexpr float y2 = foo(); // expected-error {{must be initialized by a constant expression}} expected-note {{non-constexpr function 'foo'}}
};