diff --git a/lib/Sema/SemaDeclCXX.cpp b/lib/Sema/SemaDeclCXX.cpp index fbc3fd7eb8169c0297a3b657b32adbfaa0c1b911..65705f5a559d2213b98e50e9cd06e91e7d650c6f 100644 --- a/lib/Sema/SemaDeclCXX.cpp +++ b/lib/Sema/SemaDeclCXX.cpp @@ -1960,14 +1960,19 @@ Sema::ActOnCXXMemberDeclarator(Scope *S, AccessSpecifier AS, Declarator &D, Diag(DS.getConstexprSpecLoc(), diag::err_invalid_constexpr_member); SourceLocation ConstexprLoc = DS.getConstexprSpecLoc(); if (InitStyle == ICIS_NoInit) { - B << 0 << 0 << FixItHint::CreateReplacement(ConstexprLoc, "const"); - D.getMutableDeclSpec().ClearConstexprSpec(); - const char *PrevSpec; - unsigned DiagID; - bool Failed = D.getMutableDeclSpec().SetTypeQual(DeclSpec::TQ_const, ConstexprLoc, - PrevSpec, DiagID, getLangOpts()); - (void)Failed; - assert(!Failed && "Making a constexpr member const shouldn't fail"); + B << 0 << 0; + if (D.getDeclSpec().getTypeQualifiers() & DeclSpec::TQ_const) + B << FixItHint::CreateRemoval(ConstexprLoc); + else { + B << FixItHint::CreateReplacement(ConstexprLoc, "const"); + D.getMutableDeclSpec().ClearConstexprSpec(); + const char *PrevSpec; + unsigned DiagID; + bool Failed = D.getMutableDeclSpec().SetTypeQual( + DeclSpec::TQ_const, ConstexprLoc, PrevSpec, DiagID, getLangOpts()); + (void)Failed; + assert(!Failed && "Making a constexpr member const shouldn't fail"); + } } else { B << 1; const char *PrevSpec; diff --git a/test/FixIt/fixit-cxx0x.cpp b/test/FixIt/fixit-cxx0x.cpp index bfd8c3dcfea6fa40e4639c0674bd6c9b13112a06..5fe7ca4ea9cb6f8d8b4db171aa4b797f5f62fa9f 100644 --- a/test/FixIt/fixit-cxx0x.cpp +++ b/test/FixIt/fixit-cxx0x.cpp @@ -125,7 +125,8 @@ namespace NonStaticConstexpr { struct foo { constexpr int i; // expected-error {{non-static data member cannot be constexpr; did you intend to make it const?}} constexpr int j = 7; // expected-error {{non-static data member cannot be constexpr; did you intend to make it static?}} - foo() : i(3) { + constexpr const int k; // expected-error {{non-static data member cannot be constexpr; did you intend to make it const?}} + foo() : i(3), k(4) { } static int get_j() { return j;