Fixed #1020 (lib/tokenize.cpp:4615: bool Tokenizer::validate() const: Assertion 0 failed)
This commit is contained in:
parent
57aac9270a
commit
e7d7507c65
|
@ -1730,8 +1730,15 @@ void Tokenizer::simplifySizeof()
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// sizeof * (...) -> sizeof(*...)
|
||||||
|
if (Token::simpleMatch(tok->next(), "* (") && !Token::simpleMatch(tok->tokAt(2)->link(), ") ."))
|
||||||
|
{
|
||||||
|
tok->deleteNext();
|
||||||
|
tok->next()->insertToken("*");
|
||||||
|
}
|
||||||
|
|
||||||
// sizeof int -> sizeof( int )
|
// sizeof int -> sizeof( int )
|
||||||
if (tok->strAt(1) != std::string("("))
|
if (tok->next()->str() != "(")
|
||||||
{
|
{
|
||||||
// Add parenthesis around the sizeof
|
// Add parenthesis around the sizeof
|
||||||
for (Token *tempToken = tok->next(); tempToken; tempToken = tempToken->next())
|
for (Token *tempToken = tok->next(); tempToken; tempToken = tempToken->next())
|
||||||
|
|
|
@ -70,6 +70,7 @@ private:
|
||||||
TEST_CASE(sizeof12);
|
TEST_CASE(sizeof12);
|
||||||
TEST_CASE(sizeof13);
|
TEST_CASE(sizeof13);
|
||||||
TEST_CASE(sizeof14);
|
TEST_CASE(sizeof14);
|
||||||
|
TEST_CASE(sizeof15);
|
||||||
TEST_CASE(casting);
|
TEST_CASE(casting);
|
||||||
|
|
||||||
TEST_CASE(strlen1);
|
TEST_CASE(strlen1);
|
||||||
|
@ -148,9 +149,14 @@ private:
|
||||||
|
|
||||||
std::string tok(const char code[], bool simplify = true)
|
std::string tok(const char code[], bool simplify = true)
|
||||||
{
|
{
|
||||||
|
errout.str("");
|
||||||
|
|
||||||
|
Settings settings;
|
||||||
|
Tokenizer tokenizer(&settings, this);
|
||||||
|
|
||||||
std::istringstream istr(code);
|
std::istringstream istr(code);
|
||||||
Tokenizer tokenizer;
|
|
||||||
tokenizer.tokenize(istr, "test.cpp");
|
tokenizer.tokenize(istr, "test.cpp");
|
||||||
|
|
||||||
if (simplify)
|
if (simplify)
|
||||||
tokenizer.simplifyTokenList();
|
tokenizer.simplifyTokenList();
|
||||||
|
|
||||||
|
@ -908,6 +914,17 @@ private:
|
||||||
ASSERT_EQUALS(expected, tok(code));
|
ASSERT_EQUALS(expected, tok(code));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void sizeof15()
|
||||||
|
{
|
||||||
|
// ticket #1020
|
||||||
|
tok("void f()\n"
|
||||||
|
"{\n"
|
||||||
|
" int *n;\n"
|
||||||
|
" sizeof *(n);\n"
|
||||||
|
"}\n");
|
||||||
|
ASSERT_EQUALS("", errout.str());
|
||||||
|
}
|
||||||
|
|
||||||
void casting()
|
void casting()
|
||||||
{
|
{
|
||||||
{
|
{
|
||||||
|
|
Loading…
Reference in New Issue