Fixed #6182 (Format specifier check confused by ternary operator)
This commit is contained in:
parent
7d85cb37ed
commit
1729ea6f0f
|
@ -1427,8 +1427,8 @@ CheckIO::ArgumentInfo::ArgumentInfo(const Token * tok, const Settings *settings)
|
||||||
tok1 = tok1->link();
|
tok1 = tok1->link();
|
||||||
|
|
||||||
// check for some common well known functions
|
// check for some common well known functions
|
||||||
else if ((Token::Match(tok1->previous(), "%var% . size|empty|c_str ( )") && isStdContainer(tok1->previous())) ||
|
else if ((Token::Match(tok1->previous(), "%var% . size|empty|c_str ( ) [,)]") && isStdContainer(tok1->previous())) ||
|
||||||
(Token::Match(tok1->previous(), "] . size|empty|c_str ( )") && Token::Match(tok1->previous()->link()->previous(), "%var%") && isStdContainer(tok1->previous()->link()->previous()))) {
|
(Token::Match(tok1->previous(), "] . size|empty|c_str ( ) [,)]") && Token::Match(tok1->previous()->link()->previous(), "%var%") && isStdContainer(tok1->previous()->link()->previous()))) {
|
||||||
tempToken = new Token(0);
|
tempToken = new Token(0);
|
||||||
tempToken->fileIndex(tok1->fileIndex());
|
tempToken->fileIndex(tok1->fileIndex());
|
||||||
tempToken->linenr(tok1->linenr());
|
tempToken->linenr(tok1->linenr());
|
||||||
|
|
|
@ -59,6 +59,8 @@ private:
|
||||||
TEST_CASE(testMicrosoftCStringFormatArguments); // ticket #4920
|
TEST_CASE(testMicrosoftCStringFormatArguments); // ticket #4920
|
||||||
TEST_CASE(testMicrosoftSecurePrintfArgument);
|
TEST_CASE(testMicrosoftSecurePrintfArgument);
|
||||||
TEST_CASE(testMicrosoftSecureScanfArgument);
|
TEST_CASE(testMicrosoftSecureScanfArgument);
|
||||||
|
|
||||||
|
TEST_CASE(testTernary); // ticket #6182
|
||||||
}
|
}
|
||||||
|
|
||||||
void check(const char code[], bool inconclusive = false, bool portability = false, Settings::PlatformType platform = Settings::Unspecified) {
|
void check(const char code[], bool inconclusive = false, bool portability = false, Settings::PlatformType platform = Settings::Unspecified) {
|
||||||
|
@ -3639,6 +3641,14 @@ private:
|
||||||
"}\n", false, false, Settings::Win32W);
|
"}\n", false, false, Settings::Win32W);
|
||||||
ASSERT_EQUALS("", errout.str());
|
ASSERT_EQUALS("", errout.str());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void testTernary() { // ticket #6182
|
||||||
|
check("void test(const std::string &val) {\n"
|
||||||
|
" printf(\"%s\n\", val.empty() ? \"I like to eat bananas\" : val.c_str());\n"
|
||||||
|
"}\n");
|
||||||
|
ASSERT_EQUALS("", errout.str());
|
||||||
|
}
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
REGISTER_TEST(TestIO)
|
REGISTER_TEST(TestIO)
|
||||||
|
|
Loading…
Reference in New Issue