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();
|
||||
|
||||
// check for some common well known functions
|
||||
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()))) {
|
||||
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()))) {
|
||||
tempToken = new Token(0);
|
||||
tempToken->fileIndex(tok1->fileIndex());
|
||||
tempToken->linenr(tok1->linenr());
|
||||
|
|
|
@ -59,6 +59,8 @@ private:
|
|||
TEST_CASE(testMicrosoftCStringFormatArguments); // ticket #4920
|
||||
TEST_CASE(testMicrosoftSecurePrintfArgument);
|
||||
TEST_CASE(testMicrosoftSecureScanfArgument);
|
||||
|
||||
TEST_CASE(testTernary); // ticket #6182
|
||||
}
|
||||
|
||||
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);
|
||||
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)
|
||||
|
|
Loading…
Reference in New Issue