| 5910 | //--------------------------------------------------------------------------- |
| 5911 | |
| 5912 | static void checkVariableCallMatch(const Variable* callarg, const Variable* funcarg, size_t& same, size_t& fallback1, size_t& fallback2) |
| 5913 | { |
| 5914 | if (callarg) { |
| 5915 | const ValueType::MatchResult res = ValueType::matchParameter(callarg->valueType(), callarg, funcarg); |
| 5916 | if (res == ValueType::MatchResult::SAME) { |
| 5917 | same++; |
| 5918 | return; |
| 5919 | } |
| 5920 | if (res == ValueType::MatchResult::FALLBACK1) { |
| 5921 | fallback1++; |
| 5922 | return; |
| 5923 | } |
| 5924 | if (res == ValueType::MatchResult::FALLBACK2) { |
| 5925 | fallback2++; |
| 5926 | return; |
| 5927 | } |
| 5928 | if (res == ValueType::MatchResult::NOMATCH) |
| 5929 | return; |
| 5930 | |
| 5931 | const bool ptrequals = callarg->isArrayOrPointer() == funcarg->isArrayOrPointer(); |
| 5932 | const bool constEquals = !callarg->isArrayOrPointer() || ((callarg->typeStartToken()->strAt(-1) == "const") == (funcarg->typeStartToken()->strAt(-1) == "const")); |
| 5933 | if (ptrequals && constEquals && |
| 5934 | callarg->typeStartToken()->str() == funcarg->typeStartToken()->str() && |
| 5935 | callarg->typeStartToken()->isUnsigned() == funcarg->typeStartToken()->isUnsigned() && |
| 5936 | callarg->typeStartToken()->isLong() == funcarg->typeStartToken()->isLong()) { |
| 5937 | same++; |
| 5938 | } else if (callarg->isArrayOrPointer()) { |
| 5939 | if (ptrequals && constEquals && funcarg->typeStartToken()->str() == "void") // cppcheck-suppress knownConditionTrueFalse // #14418 |
| 5940 | fallback1++; |
| 5941 | else if (constEquals && funcarg->isStlStringType() && Token::Match(callarg->typeStartToken(), "char|wchar_t")) |
| 5942 | fallback2++; |
| 5943 | } else if (ptrequals) { |
| 5944 | const bool takesInt = Token::Match(funcarg->typeStartToken(), "char|short|int|long"); |
| 5945 | const bool takesFloat = Token::Match(funcarg->typeStartToken(), "float|double"); |
| 5946 | const bool passesInt = Token::Match(callarg->typeStartToken(), "char|short|int|long"); |
| 5947 | const bool passesFloat = Token::Match(callarg->typeStartToken(), "float|double"); |
| 5948 | if ((takesInt && passesInt) || (takesFloat && passesFloat)) |
| 5949 | fallback1++; |
| 5950 | else if ((takesInt && passesFloat) || (takesFloat && passesInt)) |
| 5951 | fallback2++; |
| 5952 | } |
| 5953 | } |
| 5954 | } |
| 5955 | |
| 5956 | static std::string getTypeString(const Token *typeToken) |
| 5957 | { |
no test coverage detected