diff --git a/lib/symboldatabase.cpp b/lib/symboldatabase.cpp index e8f033ad4..46481805b 100644 --- a/lib/symboldatabase.cpp +++ b/lib/symboldatabase.cpp @@ -3820,9 +3820,14 @@ void SymbolDatabase::setValueTypeInTokenList(Token *tokens) ::setValueType(tok, ValueType(ValueType::Sign::UNKNOWN_SIGN, ValueType::Type::BOOL, 0U)); else if (tok->tokType() == Token::eChar) ::setValueType(tok, ValueType(ValueType::Sign::UNKNOWN_SIGN, ValueType::Type::CHAR, 0U)); - else if (tok->tokType() == Token::eString) - ::setValueType(tok, ValueType(ValueType::Sign::UNKNOWN_SIGN, ValueType::Type::CHAR, 1U, 1U)); - else if (tok->str() == "(") { + else if (tok->tokType() == Token::eString) { + ValueType valuetype(ValueType::Sign::UNKNOWN_SIGN, ValueType::Type::CHAR, 1U, 1U); + if (tok->isLong()) { + valuetype.originalTypeName = "wchar_t"; + valuetype.type = ValueType::Type::SHORT; + } + ::setValueType(tok, valuetype); + } else if (tok->str() == "(") { // cast if (!tok->astOperand2() && Token::Match(tok, "( %name%")) { ValueType valuetype; diff --git a/test/testsymboldatabase.cpp b/test/testsymboldatabase.cpp index 89dee0deb..9cdf6fcb4 100644 --- a/test/testsymboldatabase.cpp +++ b/test/testsymboldatabase.cpp @@ -2976,6 +2976,7 @@ private: ASSERT_EQUALS("const char *", typeOf("\"hello\" + 1", "+")); ASSERT_EQUALS("char", typeOf("\"hello\"[1]", "[")); ASSERT_EQUALS("char", typeOf("*\"hello\"", "*")); + ASSERT_EQUALS("const short *", typeOf("L\"hello\" + 1", "+")); // Variable calculations ASSERT_EQUALS("int", typeOf("int x; a = x + 1;", "+"));