Fixed #7491 (Questionable enumMismatch)
This commit is contained in:
parent
3a6e33d58e
commit
bf8471e109
|
@ -338,16 +338,16 @@ void CheckType::checkEnumMismatch()
|
||||||
}
|
}
|
||||||
|
|
||||||
// Comparing enum variable against mismatching value
|
// Comparing enum variable against mismatching value
|
||||||
else if (tok->isComparisonOp()) {
|
else if (Token::Match(tok, "==|!=")) {
|
||||||
if (!tok->astOperand1() || !tok->astOperand2())
|
if (!tok->astOperand1() || !tok->astOperand2())
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
const ValueFlow::Value * const v1 = mismatchingValue(tok->astOperand1()->valueType(), tok->astOperand2()->values);
|
const ValueFlow::Value * const v1 = mismatchingValue(tok->astOperand1()->valueType(), tok->astOperand2()->values);
|
||||||
if (v1)
|
if (v1 && v1->isKnown())
|
||||||
enumMismatchCompareError(tok, *v1);
|
enumMismatchCompareError(tok, *v1);
|
||||||
|
|
||||||
const ValueFlow::Value * const v2 = mismatchingValue(tok->astOperand2()->valueType(), tok->astOperand1()->values);
|
const ValueFlow::Value * const v2 = mismatchingValue(tok->astOperand2()->valueType(), tok->astOperand1()->values);
|
||||||
if (v2)
|
if (v2 && v2->isKnown())
|
||||||
enumMismatchCompareError(tok, *v2);
|
enumMismatchCompareError(tok, *v2);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -228,6 +228,13 @@ private:
|
||||||
" if (5==abc) {}\n"
|
" if (5==abc) {}\n"
|
||||||
"}", &settings);
|
"}", &settings);
|
||||||
ASSERT_EQUALS("[test.cpp:3]: (style) Comparing mismatching value 5 with enum variable.\n", errout.str());
|
ASSERT_EQUALS("[test.cpp:3]: (style) Comparing mismatching value 5 with enum variable.\n", errout.str());
|
||||||
|
|
||||||
|
check("enum ABC {NEG1=-2,NEG2=-1,POS1=1,POS2=2};\n" // #7491
|
||||||
|
"void f(enum ABC abc) {\n"
|
||||||
|
" if (abc>0) {}\n"
|
||||||
|
"}", &settings);
|
||||||
|
ASSERT_EQUALS("", errout.str());
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
Loading…
Reference in New Issue