diff --git a/lib/symboldatabase.cpp b/lib/symboldatabase.cpp index 40c18bdbff6..2a17badd34d 100644 --- a/lib/symboldatabase.cpp +++ b/lib/symboldatabase.cpp @@ -7422,7 +7422,7 @@ void SymbolDatabase::setValueTypeInTokenList(bool reportDebugWarnings, Token *to } else if (tok->isLong()) { valuetype.originalTypeName = "wchar_t"; valuetype.type = ValueType::Type::WCHAR_T; - } else if ((tok->tokType() == Token::eChar) && ((!tok->isCpp() && tok->isCChar()) || (tok->isCMultiChar()))) { + } else if ((tok->tokType() == Token::eChar) && ((!tok->isCpp() && tok->isCChar()) || (tok->isCMultiChar() && !isPrefixStringCharLiteral(tok->str(), '\'', "\'\\")))) { valuetype.type = ValueType::Type::INT; valuetype.sign = ValueType::Sign::SIGNED; } diff --git a/test/testsymboldatabase.cpp b/test/testsymboldatabase.cpp index 10276b3dc72..50346041a10 100644 --- a/test/testsymboldatabase.cpp +++ b/test/testsymboldatabase.cpp @@ -8887,6 +8887,7 @@ class TestSymbolDatabase : public TestFixture { // char ASSERT_EQUALS("char", typeOf("'a';", "'a'", true)); + ASSERT_EQUALS("char", typeOf("'\\\'';", "'\\\''", true)); ASSERT_EQUALS("signed int", typeOf("'a';", "'a'", false)); ASSERT_EQUALS("wchar_t", typeOf("L'a';", "L'a'", true)); ASSERT_EQUALS("wchar_t", typeOf("L'a';", "L'a'", false));