diff --git a/clang/lib/Sema/SemaDecl.cpp b/clang/lib/Sema/SemaDecl.cpp --- a/clang/lib/Sema/SemaDecl.cpp +++ b/clang/lib/Sema/SemaDecl.cpp @@ -4508,15 +4508,15 @@ } // C++ doesn't have tentative definitions, so go right ahead and check here. - if (getLangOpts().CPlusPlus && - New->isThisDeclarationADefinition() == VarDecl::Definition) { + if (getLangOpts().CPlusPlus) { if (Old->isStaticDataMember() && Old->getCanonicalDecl()->isInline() && Old->getCanonicalDecl()->isConstexpr()) { // This definition won't be a definition any more once it's been merged. Diag(New->getLocation(), diag::warn_deprecated_redundant_constexpr_static_def); - } else if (VarDecl *Def = Old->getDefinition()) { - if (checkVarDeclRedefinition(Def, New)) + } else if (New->isThisDeclarationADefinition() == VarDecl::Definition) { + VarDecl *Def = Old->getDefinition(); + if (Def && checkVarDeclRedefinition(Def, New)) return; } } diff --git a/clang/test/CXX/basic/basic.def/p2.cpp b/clang/test/CXX/basic/basic.def/p2.cpp --- a/clang/test/CXX/basic/basic.def/p2.cpp +++ b/clang/test/CXX/basic/basic.def/p2.cpp @@ -5,4 +5,9 @@ static constexpr int n = 0; }; const int A::n; // expected-warning {{deprecated}} + + struct B { + static constexpr int m = 0; + }; + constexpr int B::m; // expected-warning {{deprecated}} }