summaryrefslogtreecommitdiff
path: root/compilerplugins
diff options
context:
space:
mode:
Diffstat (limited to 'compilerplugins')
-rw-r--r--compilerplugins/clang/test/unnecessaryparen.cxx2
-rw-r--r--compilerplugins/clang/unnecessaryparen.cxx9
2 files changed, 10 insertions, 1 deletions
diff --git a/compilerplugins/clang/test/unnecessaryparen.cxx b/compilerplugins/clang/test/unnecessaryparen.cxx
index f932cd312558..ccc2b4ce6556 100644
--- a/compilerplugins/clang/test/unnecessaryparen.cxx
+++ b/compilerplugins/clang/test/unnecessaryparen.cxx
@@ -113,6 +113,8 @@ int main()
BrowseMode nBits = ( BrowseMode::Modules | BrowseMode::Top ); // expected-error {{parentheses immediately inside vardecl statement [loplugin:unnecessaryparen]}}
(void)nBits;
+
+ OUString::number((v2+1)); // expected-error {{parentheses immediately inside single-arg call [loplugin:unnecessaryparen]}}
};
struct B { operator bool() const; };
diff --git a/compilerplugins/clang/unnecessaryparen.cxx b/compilerplugins/clang/unnecessaryparen.cxx
index d39dd074eb43..eb53c449cd77 100644
--- a/compilerplugins/clang/unnecessaryparen.cxx
+++ b/compilerplugins/clang/unnecessaryparen.cxx
@@ -368,9 +368,16 @@ bool UnnecessaryParen::VisitCallExpr(const CallExpr* callExpr)
{
if (ignoreLocation(callExpr))
return true;
- if (callExpr->getNumArgs() != 1 || isa<CXXOperatorCallExpr>(callExpr))
+ if (callExpr->getNumArgs() == 0 || isa<CXXOperatorCallExpr>(callExpr))
return true;
+ // if we are calling a >1 arg method, are we using the defaults?
+ if (callExpr->getNumArgs() > 1)
+ {
+ if (!isa<CXXDefaultArgExpr>(callExpr->getArg(1)))
+ return true;
+ }
+
auto parenExpr = dyn_cast<ParenExpr>(ignoreAllImplicit(callExpr->getArg(0)));
if (!parenExpr)
return true;