From 77c17100ec9d716b89298f0c08e72d62beed4460 Mon Sep 17 00:00:00 2001 From: PKEuS Date: Sun, 23 Mar 2014 10:06:14 +0100 Subject: [PATCH] Bailout in private function usage checking for operators (#5059). --- lib/checkclass.cpp | 2 +- test/testunusedprivfunc.cpp | 13 +++++++++++++ 2 files changed, 14 insertions(+), 1 deletion(-) diff --git a/lib/checkclass.cpp b/lib/checkclass.cpp index 0e64e5bff..a7f1700ee 100644 --- a/lib/checkclass.cpp +++ b/lib/checkclass.cpp @@ -873,7 +873,7 @@ void CheckClass::privateFunctions() std::list FuncList; for (std::list::const_iterator func = scope->functionList.begin(); func != scope->functionList.end(); ++func) { // Get private functions.. - if (func->type == Function::eFunction && func->access == Private) + if (func->type == Function::eFunction && func->access == Private && !func->isOperator) // TODO: There are smarter ways to check private operator usage FuncList.push_back(&*func); } diff --git a/test/testunusedprivfunc.cpp b/test/testunusedprivfunc.cpp index 29f335913..15084d627 100644 --- a/test/testunusedprivfunc.cpp +++ b/test/testunusedprivfunc.cpp @@ -579,6 +579,19 @@ private: " }\n" "};"); ASSERT_EQUALS("[test.cpp:8]: (style) Unused private function: 'Fred::startListening'\n", errout.str()); + + // #5059 + check("class Fred {\n" + " void* operator new(size_t obj_size, size_t buf_size) {}\n" + "};"); + TODO_ASSERT_EQUALS("[test.cpp:2]: (style) Unused private function: 'Fred::operatornew'\n", "", errout.str()); // No message for operators - we currently cannot check their usage + + check("class Fred {\n" + " void* operator new(size_t obj_size, size_t buf_size) {}\n" + "public:\n" + " void* foo() { return new(size) Fred(); }\n" + "};"); + ASSERT_EQUALS("", errout.str()); } void testDoesNotIdentifyMethodAsFirstFunctionArgument() {