@@ -4406,9 +4406,29 @@ static const Token * parsedecl(const Token *type, ValueType * const valuetype, V
44064406 valuetype->sign = ValueType::Sign::UNKNOWN_SIGN;
44074407 if (!valuetype->typeScope )
44084408 valuetype->type = ValueType::Type::UNKNOWN_TYPE;
4409- else if (valuetype->typeScope ->type == Scope::eEnum)
4410- valuetype->type = ValueType::Type::INT;
4411- else
4409+ else if (valuetype->typeScope ->type == Scope::eEnum) {
4410+ const Token * enum_type = valuetype->typeScope ->enumType ;
4411+ if (enum_type) {
4412+ if (enum_type->isSigned ())
4413+ valuetype->sign = ValueType::Sign::SIGNED;
4414+ else if (enum_type->isUnsigned ())
4415+ valuetype->sign = ValueType::Sign::UNSIGNED;
4416+ else
4417+ valuetype->sign = defaultSignedness;
4418+ if (enum_type->str () == " char" )
4419+ valuetype->type = ValueType::Type::CHAR;
4420+ else if (enum_type->str () == " short" )
4421+ valuetype->type = ValueType::Type::SHORT;
4422+ else if (enum_type->str () == " int" )
4423+ valuetype->type = ValueType::Type::INT;
4424+ else if (enum_type->str () == " long" )
4425+ valuetype->type = enum_type->isLong () ? ValueType::Type::LONGLONG : ValueType::Type::LONG;
4426+ else if (enum_type->isStandardType ()) {
4427+ valuetype->fromLibraryType (enum_type->str (), settings);
4428+ }
4429+ } else
4430+ valuetype->type = ValueType::Type::INT;
4431+ } else
44124432 valuetype->type = ValueType::Type::NONSTD;
44134433 while (Token::Match (type, " %name%|*|&|::" ) && !type->variable ()) {
44144434 if (type->isSigned ())
0 commit comments