summaryrefslogtreecommitdiff
path: root/compilerplugins/clang/overrideparam.cxx
diff options
context:
space:
mode:
authorStephan Bergmann <sbergman@redhat.com>2017-11-10 13:40:12 +0100
committerStephan Bergmann <sbergman@redhat.com>2017-11-11 00:04:25 +0100
commit5d12237d79f289a1dcf8e07aa03df329e136f078 (patch)
tree1654bf34307bfc56b8db479e9934efb8a7cb1186 /compilerplugins/clang/overrideparam.cxx
parent1fc79c3491906d85ed9972e161112459035b62ed (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.cxx51
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");
}