forked from OSchip/llvm-project
Expand definition deprecation warning to include constexpr statements.
Clang currently warns on definitions downgraded to declarations with a const modifier, but not for a constexpr modifier. This patch updates the warning logic to warn on both inputs, and adds a test to check the additional case as well. See also: https://bugs.chromium.org/p/chromium/issues/detail?id=1284718 Differential Revision: https://reviews.llvm.org/D126664
This commit is contained in:
parent
aeb27f133a
commit
1f6ea2a37c
|
@ -241,6 +241,9 @@ Improvements to Clang's diagnostics
|
|||
suggest ``#else`` as an alternative. ``#elifdef`` and ``#elifndef`` are only
|
||||
suggested when in C2x or C++2b mode. Fixes
|
||||
`Issue 51598 <https://github.com/llvm/llvm-project/issues/51598>`_.
|
||||
- The ``-Wdeprecated`` diagnostic will now warn on out-of-line ``constexpr``
|
||||
declarations downgraded to definitions in C++1z, in addition to the
|
||||
existing warning on out-of-line ``const`` declarations.
|
||||
|
||||
Non-comprehensive list of changes in this release
|
||||
-------------------------------------------------
|
||||
|
|
|
@ -4508,15 +4508,15 @@ void Sema::MergeVarDecl(VarDecl *New, LookupResult &Previous) {
|
|||
}
|
||||
|
||||
// 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;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -5,4 +5,9 @@ namespace {
|
|||
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}}
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue