Ticket #5625: Simplify constant ternary operator in template parameters.
This commit is contained in:
parent
b48bf1dbad
commit
9ddf857dc7
|
@ -246,8 +246,8 @@ unsigned int TemplateSimplifier::templateParameters(const Token *tok)
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Skip '='
|
// Skip '=', '?', ':'
|
||||||
if (tok && tok->str() == "=")
|
if (tok && Token::Match(tok, "=|?|:"))
|
||||||
tok = tok->next();
|
tok = tok->next();
|
||||||
if (!tok)
|
if (!tok)
|
||||||
return 0;
|
return 0;
|
||||||
|
|
|
@ -4862,7 +4862,7 @@ bool Tokenizer::simplifyConstTernaryOp()
|
||||||
|
|
||||||
else if (endTok->str() == "?")
|
else if (endTok->str() == "?")
|
||||||
++ternaryOplevel;
|
++ternaryOplevel;
|
||||||
else if (Token::Match(endTok, ")|}|]|;|,|:")) {
|
else if (Token::Match(endTok, ")|}|]|;|,|:|>")) {
|
||||||
if (endTok->str() == ":" && ternaryOplevel)
|
if (endTok->str() == ":" && ternaryOplevel)
|
||||||
--ternaryOplevel;
|
--ternaryOplevel;
|
||||||
else {
|
else {
|
||||||
|
|
|
@ -254,6 +254,7 @@ private:
|
||||||
TEST_CASE(simplify_constants3);
|
TEST_CASE(simplify_constants3);
|
||||||
TEST_CASE(simplify_constants4);
|
TEST_CASE(simplify_constants4);
|
||||||
TEST_CASE(simplify_constants5);
|
TEST_CASE(simplify_constants5);
|
||||||
|
TEST_CASE(simplify_constants6); // Ticket #5625: Ternary operator as template parameter
|
||||||
TEST_CASE(simplify_null);
|
TEST_CASE(simplify_null);
|
||||||
TEST_CASE(simplifyMulAndParens); // Ticket #2784 + #3184
|
TEST_CASE(simplifyMulAndParens); // Ticket #2784 + #3184
|
||||||
|
|
||||||
|
@ -3591,6 +3592,20 @@ private:
|
||||||
ASSERT_EQUALS("int buffer [ 10 ] ;\n\n\nx = 10 ;\ny = 10 ;", tokenizeAndStringify(code,true));
|
ASSERT_EQUALS("int buffer [ 10 ] ;\n\n\nx = 10 ;\ny = 10 ;", tokenizeAndStringify(code,true));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void simplify_constants6() { // Ticket #5625
|
||||||
|
const char code[] = "template < class T > struct foo ;\n"
|
||||||
|
"void bar ( ) {\n"
|
||||||
|
"foo < 1 ? 0 ? 1 : 6 : 2 > x ;\n"
|
||||||
|
"foo < 1 ? 0 : 2 > y ;\n"
|
||||||
|
"}";
|
||||||
|
const char exp [] = "template < class T > struct foo ;\n"
|
||||||
|
"void bar ( ) {\n"
|
||||||
|
"foo < 6 > x ;\n"
|
||||||
|
"foo < 0 > y ;\n"
|
||||||
|
"}";
|
||||||
|
ASSERT_EQUALS(exp, tokenizeAndStringify(code, true));
|
||||||
|
}
|
||||||
|
|
||||||
void simplify_null() {
|
void simplify_null() {
|
||||||
{
|
{
|
||||||
const char code[] =
|
const char code[] =
|
||||||
|
|
Loading…
Reference in New Issue