diff options
author | Stephan Bergmann <sbergman@redhat.com> | 2017-11-10 13:40:12 +0100 |
---|---|---|
committer | Stephan Bergmann <sbergman@redhat.com> | 2017-11-11 00:04:25 +0100 |
commit | 5d12237d79f289a1dcf8e07aa03df329e136f078 (patch) | |
tree | 1654bf34307bfc56b8db479e9934efb8a7cb1186 /compilerplugins/clang/overrideparam.cxx | |
parent | 1fc79c3491906d85ed9972e161112459035b62ed (diff) |
loplugin:unnecessaryoverride: suppress warnings when default args differ
...instead of blacklisting such cases. Reuses the
checkIdenticalDefaultArguments code that was originally in
loplugin:overrideparam (and appears to work reasonably well for the default
arguments that actually happen in practice).
Change-Id: I9cf2db17101beb135b2039a9b7ed335bd2af2c08
Reviewed-on: https://gerrit.libreoffice.org/44594
Tested-by: Jenkins <ci@libreoffice.org>
Reviewed-by: Stephan Bergmann <sbergman@redhat.com>
Diffstat (limited to 'compilerplugins/clang/overrideparam.cxx')
-rw-r--r-- | compilerplugins/clang/overrideparam.cxx | 51 |
1 files changed, 4 insertions, 47 deletions
diff --git a/compilerplugins/clang/overrideparam.cxx b/compilerplugins/clang/overrideparam.cxx index e3b8a4e0fd88..820127e1343d 100644 --- a/compilerplugins/clang/overrideparam.cxx +++ b/compilerplugins/clang/overrideparam.cxx @@ -38,7 +38,6 @@ public: private: bool hasSameDefaultParams(const ParmVarDecl * parmVarDecl, const ParmVarDecl * superParmVarDecl); - bool evaluate(const Expr* expr, APSInt& x); }; void OverrideParam::run() @@ -148,39 +147,10 @@ bool OverrideParam::hasSameDefaultParams(const ParmVarDecl * parmVarDecl, const if (parmVarDecl->hasUninstantiatedDefaultArg() || superParmVarDecl->hasUninstantiatedDefaultArg()) { return true; } - const Expr* defaultArgExpr = parmVarDecl->getDefaultArg(); - const Expr* superDefaultArgExpr = superParmVarDecl->getDefaultArg(); - - if (defaultArgExpr->isNullPointerConstant(compiler.getASTContext(), Expr::NPC_NeverValueDependent) - && superDefaultArgExpr->isNullPointerConstant(compiler.getASTContext(), Expr::NPC_NeverValueDependent)) - { - return true; - } - APSInt x1, x2; - if (evaluate(defaultArgExpr, x1) && evaluate(superDefaultArgExpr, x2)) - { - return x1 == x2; - } -#if CLANG_VERSION >= 30900 - APFloat f1(0.0f), f2(0.0f); - if (defaultArgExpr->EvaluateAsFloat(f1, compiler.getASTContext()) - && superDefaultArgExpr->EvaluateAsFloat(f2, compiler.getASTContext())) - { - return f1.bitwiseIsEqual(f2); - } -#endif - // catch params with defaults like "= OUString()" - if (isa<MaterializeTemporaryExpr>(defaultArgExpr) - && isa<MaterializeTemporaryExpr>(superDefaultArgExpr)) - { - return true; - } - if (isa<CXXBindTemporaryExpr>(defaultArgExpr) - && isa<CXXBindTemporaryExpr>(superDefaultArgExpr)) - { - return true; - } - return true; + return + checkIdenticalDefaultArguments( + parmVarDecl->getDefaultArg(), superParmVarDecl->getDefaultArg()) + != IdenticalDefaultArgumentsResult::No; // for one, Clang 3.8 doesn't have EvaluateAsFloat; for another, since // <http://llvm.org/viewvc/llvm-project?view=revision&revision=291318> // "PR23135: Don't instantiate constexpr functions referenced in @@ -196,19 +166,6 @@ bool OverrideParam::hasSameDefaultParams(const ParmVarDecl * parmVarDecl, const // that would probably have unwanted side-effects) } -bool OverrideParam::evaluate(const Expr* expr, APSInt& x) -{ - if (expr->EvaluateAsInt(x, compiler.getASTContext())) - { - return true; - } - if (isa<CXXNullPtrLiteralExpr>(expr)) { - x = 0; - return true; - } - return false; -} - loplugin::Plugin::Registration< OverrideParam > X("overrideparam"); } |