Fixed #5284 (duplicateExpression falsely reported by members of a union in some circumstances)
This commit is contained in:
parent
cb40e83261
commit
372c29c24e
|
@ -2860,7 +2860,7 @@ static bool astIsFloat(const Token *tok)
|
||||||
return true;
|
return true;
|
||||||
|
|
||||||
// TODO: check function calls, struct members, arrays, etc also
|
// TODO: check function calls, struct members, arrays, etc also
|
||||||
return tok->variable() && Token::Match(tok->variable()->typeStartToken(), "float|double");
|
return !tok->variable() || Token::findmatch(tok->variable()->typeStartToken(), "float|double", tok->variable()->typeEndToken()->next(), 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
//---------------------------------------------------------------------------
|
//---------------------------------------------------------------------------
|
||||||
|
|
|
@ -4591,12 +4591,12 @@ private:
|
||||||
}
|
}
|
||||||
|
|
||||||
void duplicateExpression1() {
|
void duplicateExpression1() {
|
||||||
check("void foo() {\n"
|
check("void foo(int a) {\n"
|
||||||
" if (a == a) { }\n"
|
" if (a == a) { }\n"
|
||||||
"}");
|
"}");
|
||||||
ASSERT_EQUALS("[test.cpp:2] -> [test.cpp:2]: (style) Same expression on both sides of '=='.\n", errout.str());
|
ASSERT_EQUALS("[test.cpp:2] -> [test.cpp:2]: (style) Same expression on both sides of '=='.\n", errout.str());
|
||||||
|
|
||||||
check("void fun() {\n"
|
check("void fun(int b) {\n"
|
||||||
" return a && a ||\n"
|
" return a && a ||\n"
|
||||||
" b == b &&\n"
|
" b == b &&\n"
|
||||||
" d > d &&\n"
|
" d > d &&\n"
|
||||||
|
@ -4618,12 +4618,12 @@ private:
|
||||||
"}");
|
"}");
|
||||||
ASSERT_EQUALS("[test.cpp:2] -> [test.cpp:2]: (style) Same expression on both sides of '&&'.\n", errout.str());
|
ASSERT_EQUALS("[test.cpp:2] -> [test.cpp:2]: (style) Same expression on both sides of '&&'.\n", errout.str());
|
||||||
|
|
||||||
check("void foo() {\n"
|
check("void foo(int b) {\n"
|
||||||
" f(a,b == b);\n"
|
" f(a,b == b);\n"
|
||||||
"}");
|
"}");
|
||||||
ASSERT_EQUALS("[test.cpp:2] -> [test.cpp:2]: (style) Same expression on both sides of '=='.\n", errout.str());
|
ASSERT_EQUALS("[test.cpp:2] -> [test.cpp:2]: (style) Same expression on both sides of '=='.\n", errout.str());
|
||||||
|
|
||||||
check("void foo() {\n"
|
check("void foo(int b) {\n"
|
||||||
" f(b == b, a);\n"
|
" f(b == b, a);\n"
|
||||||
"}");
|
"}");
|
||||||
ASSERT_EQUALS("[test.cpp:2] -> [test.cpp:2]: (style) Same expression on both sides of '=='.\n", errout.str());
|
ASSERT_EQUALS("[test.cpp:2] -> [test.cpp:2]: (style) Same expression on both sides of '=='.\n", errout.str());
|
||||||
|
@ -4760,6 +4760,10 @@ private:
|
||||||
check("struct X { float f; };\n"
|
check("struct X { float f; };\n"
|
||||||
"float f(struct X x) { return x.f == x.f; }");
|
"float f(struct X x) { return x.f == x.f; }");
|
||||||
ASSERT_EQUALS("", errout.str());
|
ASSERT_EQUALS("", errout.str());
|
||||||
|
|
||||||
|
// #5284 - when type is unknown, assume it's float
|
||||||
|
check("int f() { return x==x; }");
|
||||||
|
ASSERT_EQUALS("", errout.str());
|
||||||
}
|
}
|
||||||
|
|
||||||
void duplicateExpression3() {
|
void duplicateExpression3() {
|
||||||
|
|
Loading…
Reference in New Issue