@@ -7531,6 +7531,15 @@ static const Function* getFunction(const Token* tok) {
75317531 return nullptr ;
75327532}
75337533
7534+ static int getIntegerConstantMacroWidth (const std::string &name) {
7535+ int intnum = 0 ;
7536+ for (const char c : name) {
7537+ if (std::isdigit (c))
7538+ intnum = (intnum * 10 ) + c - 48 ;
7539+ }
7540+ return intnum;
7541+ }
7542+
75347543void SymbolDatabase::setValueTypeInTokenList (bool reportDebugWarnings, Token *tokens)
75357544{
75367545 if (!tokens)
@@ -7672,6 +7681,27 @@ void SymbolDatabase::setValueTypeInTokenList(bool reportDebugWarnings, Token *to
76727681 }
76737682 }
76747683
7684+ // functions from stdint.h
7685+ else if (Token::Match (tok->previous (), " INT16_C|INT32_C|INT64_C|INT8_C|UINT16_C|UINT32_C|UINT64_C|UINT8_C (" )) {
7686+ ValueType valuetype;
7687+ const int macroWidth = getIntegerConstantMacroWidth (tok->previous ()->str ());
7688+ if (macroWidth == 8 )
7689+ valuetype.type = ValueType::Type::CHAR;
7690+ else if (macroWidth == 16 )
7691+ valuetype.type = ValueType::Type::SHORT;
7692+ else if (macroWidth == 32 )
7693+ valuetype.type = ValueType::Type::INT;
7694+ else if (macroWidth == 64 )
7695+ valuetype.type = ValueType::Type::LONGLONG;
7696+ else
7697+ valuetype.type = ValueType::Type::INT;
7698+ if (tok->previous ()->str ()[0 ] == ' U' )
7699+ valuetype.sign = ValueType::Sign::UNSIGNED;
7700+ else
7701+ valuetype.sign = ValueType::Sign::SIGNED;
7702+ setValueType (tok, valuetype);
7703+ }
7704+
76757705 // function style cast
76767706 else if (tok->previous () && tok->previous ()->isStandardType ()) {
76777707 ValueType valuetype;
0 commit comments