Tokenizer: Avoid constant folding
This commit is contained in:
parent
d265a0d6ab
commit
29feaa5a51
|
@ -1716,13 +1716,16 @@ void CheckOther::zerodivError(const Token *tok, const ValueFlow::Value *value)
|
||||||
|
|
||||||
void CheckOther::checkNanInArithmeticExpression()
|
void CheckOther::checkNanInArithmeticExpression()
|
||||||
{
|
{
|
||||||
|
if (!mSettings->isEnabled(Settings::STYLE))
|
||||||
|
return;
|
||||||
for (const Token *tok = mTokenizer->tokens(); tok; tok = tok->next()) {
|
for (const Token *tok = mTokenizer->tokens(); tok; tok = tok->next()) {
|
||||||
if (Token::Match(tok, "inf.0 +|-") ||
|
if (tok->str() != "/")
|
||||||
Token::Match(tok, "+|- inf.0") ||
|
continue;
|
||||||
Token::Match(tok, "+|- %num% / 0.0")) {
|
if (!Token::Match(tok->astParent(), "[+-]"))
|
||||||
|
continue;
|
||||||
|
if (Token::simpleMatch(tok->astOperand2(), "0.0"))
|
||||||
nanInArithmeticExpressionError(tok);
|
nanInArithmeticExpressionError(tok);
|
||||||
}
|
}
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void CheckOther::nanInArithmeticExpressionError(const Token *tok)
|
void CheckOther::nanInArithmeticExpressionError(const Token *tok)
|
||||||
|
|
|
@ -3831,11 +3831,6 @@ bool Tokenizer::simplifyTokenList1(const char FileName[])
|
||||||
simplifyRedundantParentheses();
|
simplifyRedundantParentheses();
|
||||||
|
|
||||||
if (!isC()) {
|
if (!isC()) {
|
||||||
// TODO: Only simplify template parameters
|
|
||||||
for (Token *tok = list.front(); tok; tok = tok->next())
|
|
||||||
while (mTemplateSimplifier->simplifyNumericCalculations(tok))
|
|
||||||
;
|
|
||||||
|
|
||||||
// Handle templates..
|
// Handle templates..
|
||||||
simplifyTemplates();
|
simplifyTemplates();
|
||||||
|
|
||||||
|
|
|
@ -1193,8 +1193,7 @@ private:
|
||||||
" else\n"
|
" else\n"
|
||||||
" return;\n"
|
" return;\n"
|
||||||
"}");
|
"}");
|
||||||
TODO_ASSERT_EQUALS("", "[test.cpp:3]: (warning) Logical conjunction always evaluates to false: neg < -1.0 && neg > -1.0.\n", errout.str());
|
ASSERT_EQUALS("", errout.str());
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void incorrectLogicOperator8() { // opposite expressions
|
void incorrectLogicOperator8() { // opposite expressions
|
||||||
|
|
|
@ -641,7 +641,7 @@ private:
|
||||||
void nanInArithmeticExpression() {
|
void nanInArithmeticExpression() {
|
||||||
check("void f()\n"
|
check("void f()\n"
|
||||||
"{\n"
|
"{\n"
|
||||||
" double x = 3.0 / 0.0 + 1.0\n"
|
" double x = 3.0 / 0.0 + 1.0;\n"
|
||||||
" printf(\"%f\", x);\n"
|
" printf(\"%f\", x);\n"
|
||||||
"}");
|
"}");
|
||||||
ASSERT_EQUALS(
|
ASSERT_EQUALS(
|
||||||
|
@ -649,7 +649,7 @@ private:
|
||||||
|
|
||||||
check("void f()\n"
|
check("void f()\n"
|
||||||
"{\n"
|
"{\n"
|
||||||
" double x = 3.0 / 0.0 - 1.0\n"
|
" double x = 3.0 / 0.0 - 1.0;\n"
|
||||||
" printf(\"%f\", x);\n"
|
" printf(\"%f\", x);\n"
|
||||||
"}");
|
"}");
|
||||||
ASSERT_EQUALS(
|
ASSERT_EQUALS(
|
||||||
|
@ -657,7 +657,7 @@ private:
|
||||||
|
|
||||||
check("void f()\n"
|
check("void f()\n"
|
||||||
"{\n"
|
"{\n"
|
||||||
" double x = 1.0 + 3.0 / 0.0\n"
|
" double x = 1.0 + 3.0 / 0.0;\n"
|
||||||
" printf(\"%f\", x);\n"
|
" printf(\"%f\", x);\n"
|
||||||
"}");
|
"}");
|
||||||
ASSERT_EQUALS(
|
ASSERT_EQUALS(
|
||||||
|
@ -665,7 +665,7 @@ private:
|
||||||
|
|
||||||
check("void f()\n"
|
check("void f()\n"
|
||||||
"{\n"
|
"{\n"
|
||||||
" double x = 1.0 - 3.0 / 0.0\n"
|
" double x = 1.0 - 3.0 / 0.0;\n"
|
||||||
" printf(\"%f\", x);\n"
|
" printf(\"%f\", x);\n"
|
||||||
"}");
|
"}");
|
||||||
ASSERT_EQUALS(
|
ASSERT_EQUALS(
|
||||||
|
@ -673,7 +673,7 @@ private:
|
||||||
|
|
||||||
check("void f()\n"
|
check("void f()\n"
|
||||||
"{\n"
|
"{\n"
|
||||||
" double x = 3.0 / 0.0\n"
|
" double x = 3.0 / 0.0;\n"
|
||||||
" printf(\"%f\", x);\n"
|
" printf(\"%f\", x);\n"
|
||||||
"}");
|
"}");
|
||||||
ASSERT_EQUALS("", errout.str());
|
ASSERT_EQUALS("", errout.str());
|
||||||
|
|
|
@ -3305,7 +3305,7 @@ private:
|
||||||
|
|
||||||
void removeParentheses15() {
|
void removeParentheses15() {
|
||||||
ASSERT_EQUALS("a = b ? c : 123 ;", tokenizeAndStringify("a = b ? c : (123);", false));
|
ASSERT_EQUALS("a = b ? c : 123 ;", tokenizeAndStringify("a = b ? c : (123);", false));
|
||||||
ASSERT_EQUALS("a = b ? c : ( 579 ) ;", tokenizeAndStringify("a = b ? c : ((123)+(456));", false));
|
ASSERT_EQUALS("a = b ? c : ( 123 + 456 ) ;", tokenizeAndStringify("a = b ? c : ((123)+(456));", false));
|
||||||
ASSERT_EQUALS("a = b ? 123 : c ;", tokenizeAndStringify("a = b ? (123) : c;", false));
|
ASSERT_EQUALS("a = b ? 123 : c ;", tokenizeAndStringify("a = b ? (123) : c;", false));
|
||||||
|
|
||||||
// #4316
|
// #4316
|
||||||
|
@ -3402,7 +3402,7 @@ private:
|
||||||
"float b ; b = 4.2f ;\n"
|
"float b ; b = 4.2f ;\n"
|
||||||
"double c ; c = 4.2e+10 ;\n"
|
"double c ; c = 4.2e+10 ;\n"
|
||||||
"double d ; d = 4.2e-10 ;\n"
|
"double d ; d = 4.2e-10 ;\n"
|
||||||
"int e ; e = 6 ;\n"
|
"int e ; e = 4 + 2 ;\n"
|
||||||
"}", tokenizeAndStringify(code));
|
"}", tokenizeAndStringify(code));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -3722,7 +3722,7 @@ private:
|
||||||
// Ticket #4450
|
// Ticket #4450
|
||||||
const char code[] = "static int large_eeprom_type = (13 | (5)), "
|
const char code[] = "static int large_eeprom_type = (13 | (5)), "
|
||||||
"default_flash_type = 42;";
|
"default_flash_type = 42;";
|
||||||
ASSERT_EQUALS("static int large_eeprom_type = 13 ; static int default_flash_type = 42 ;",
|
ASSERT_EQUALS("static int large_eeprom_type = 13 | 5 ; static int default_flash_type = 42 ;",
|
||||||
tokenizeAndStringify(code));
|
tokenizeAndStringify(code));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -6012,9 +6012,6 @@ private:
|
||||||
ASSERT_EQUALS("( 0 ) ;",
|
ASSERT_EQUALS("( 0 ) ;",
|
||||||
tokenizeAndStringify("( 0 && a[123] );", true));
|
tokenizeAndStringify("( 0 && a[123] );", true));
|
||||||
|
|
||||||
// ticket #3964 - simplify numeric calculations in tokenization
|
|
||||||
ASSERT_EQUALS("char a [ 10 ] ;", tokenizeAndStringify("char a[9+1];"));
|
|
||||||
|
|
||||||
// ticket #4931
|
// ticket #4931
|
||||||
ASSERT_EQUALS("dostuff ( 1 ) ;", tokenizeAndStringify("dostuff(9&&8);", true));
|
ASSERT_EQUALS("dostuff ( 1 ) ;", tokenizeAndStringify("dostuff(9&&8);", true));
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue