ValueType::matchParameter: Improved constness matching
This commit is contained in:
parent
914430dede
commit
d5d50d9b17
|
@ -5829,7 +5829,7 @@ ValueType::MatchResult ValueType::matchParameter(const ValueType *call, const Va
|
||||||
return ValueType::MatchResult::UNKNOWN;
|
return ValueType::MatchResult::UNKNOWN;
|
||||||
if (call->pointer != func->pointer)
|
if (call->pointer != func->pointer)
|
||||||
return ValueType::MatchResult::UNKNOWN; // TODO
|
return ValueType::MatchResult::UNKNOWN; // TODO
|
||||||
if ((call->constness | func->constness) != func->constness)
|
if (call->pointer > 0 && ((call->constness | func->constness) != func->constness))
|
||||||
return ValueType::MatchResult::UNKNOWN;
|
return ValueType::MatchResult::UNKNOWN;
|
||||||
if (call->type != func->type) {
|
if (call->type != func->type) {
|
||||||
if (call->isIntegral() && func->isIntegral())
|
if (call->isIntegral() && func->isIntegral())
|
||||||
|
|
|
@ -344,6 +344,8 @@ private:
|
||||||
TEST_CASE(findFunction25); // std::vector<std::shared_ptr<Fred>>
|
TEST_CASE(findFunction25); // std::vector<std::shared_ptr<Fred>>
|
||||||
TEST_CASE(findFunction26); // #8668 - pointer parameter in function call, const pointer function argument
|
TEST_CASE(findFunction26); // #8668 - pointer parameter in function call, const pointer function argument
|
||||||
|
|
||||||
|
TEST_CASE(valueTypeMatchParameter); // ValueType::matchParameter
|
||||||
|
|
||||||
TEST_CASE(noexceptFunction1);
|
TEST_CASE(noexceptFunction1);
|
||||||
TEST_CASE(noexceptFunction2);
|
TEST_CASE(noexceptFunction2);
|
||||||
TEST_CASE(noexceptFunction3);
|
TEST_CASE(noexceptFunction3);
|
||||||
|
@ -5529,6 +5531,21 @@ private:
|
||||||
ASSERT(dostuff1->function() && dostuff1->function()->token && dostuff1->function()->token->linenr() == 1);
|
ASSERT(dostuff1->function() && dostuff1->function()->token && dostuff1->function()->token->linenr() == 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void valueTypeMatchParameter() {
|
||||||
|
ValueType vt_int;
|
||||||
|
vt_int.type = ValueType::Type::INT;
|
||||||
|
vt_int.sign = ValueType::Sign::SIGNED;
|
||||||
|
|
||||||
|
ValueType vt_const_int;
|
||||||
|
vt_const_int.type = ValueType::Type::INT;
|
||||||
|
vt_const_int.sign = ValueType::Sign::SIGNED;
|
||||||
|
vt_const_int.constness = 1;
|
||||||
|
|
||||||
|
ASSERT_EQUALS((int)ValueType::MatchResult::SAME, (int)ValueType::matchParameter(&vt_int, &vt_int));
|
||||||
|
ASSERT_EQUALS((int)ValueType::MatchResult::SAME, (int)ValueType::matchParameter(&vt_const_int, &vt_int));
|
||||||
|
ASSERT_EQUALS((int)ValueType::MatchResult::SAME, (int)ValueType::matchParameter(&vt_int, &vt_const_int));
|
||||||
|
}
|
||||||
|
|
||||||
#define FUNC(x) const Function *x = findFunctionByName(#x, &db->scopeList.front()); \
|
#define FUNC(x) const Function *x = findFunctionByName(#x, &db->scopeList.front()); \
|
||||||
ASSERT_EQUALS(true, x != nullptr); \
|
ASSERT_EQUALS(true, x != nullptr); \
|
||||||
if (x) ASSERT_EQUALS(true, x->isNoExcept());
|
if (x) ASSERT_EQUALS(true, x->isNoExcept());
|
||||||
|
|
Loading…
Reference in New Issue