diff options
Diffstat (limited to 'compilerplugins')
-rw-r--r-- | compilerplugins/clang/test/unnecessaryparen.cxx | 2 | ||||
-rw-r--r-- | compilerplugins/clang/unnecessaryparen.cxx | 9 |
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; |