diff --git a/lib/checkfunctions.cpp b/lib/checkfunctions.cpp index a668aef10..5236bb252 100644 --- a/lib/checkfunctions.cpp +++ b/lib/checkfunctions.cpp @@ -130,7 +130,7 @@ void CheckFunctions::invalidFunctionUsage() if (Token::Match(argtok, "& %var% !![") && argtok->next() && argtok->next()->valueType()) { const ValueType * valueType = argtok->next()->valueType(); const Variable * variable = argtok->next()->variable(); - if ((valueType->type == ValueType::Type::CHAR || (valueType->type == ValueType::Type::RECORD && Token::Match(argtok, "& %var% . %var% ,|)"))) && + if ((valueType->type == ValueType::Type::CHAR || valueType->type == ValueType::Type::WCHAR_T || (valueType->type == ValueType::Type::RECORD && Token::Match(argtok, "& %var% . %var% ,|)"))) && !variable->isArray() && (variable->isConst() || !variable->isGlobal()) && (!argtok->next()->hasKnownValue() || argtok->next()->getValue(0) == nullptr)) { diff --git a/test/testfunctions.cpp b/test/testfunctions.cpp index 0e7dd65a8..dbe03e526 100644 --- a/test/testfunctions.cpp +++ b/test/testfunctions.cpp @@ -745,6 +745,9 @@ private: " s[strlen(s)] = ' ';\n" "}\n"); ASSERT_EQUALS("", errout.str()); + + check("size_t f() { wchar_t x = L'x'; return wcslen(&x); }"); + ASSERT_EQUALS("[test.cpp:1]: (error) Invalid wcslen() argument nr 1. A nul-terminated string is required.\n", errout.str()); } void mathfunctionCall_sqrt() {