Fixed #1580 (unnamed anonymous struct can segfault)
This commit is contained in:
parent
e23197a527
commit
bc0a318b6d
@ -6925,15 +6925,23 @@ void Tokenizer::simplifyStructDecl()
|
|||||||
tok = tok->next();
|
tok = tok->next();
|
||||||
tok->insertToken(name.c_str());
|
tok->insertToken(name.c_str());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// unnamed anonymous struct/union so remove it
|
||||||
else if (tok->next()->str() == ";")
|
else if (tok->next()->str() == ";")
|
||||||
{
|
{
|
||||||
Token *previous = tok1->previous();
|
tok1->deleteThis();
|
||||||
previous->deleteNext();
|
if (tok1->next() == tok)
|
||||||
previous->deleteNext();
|
{
|
||||||
tok1 = previous->next();
|
tok1->deleteThis();
|
||||||
previous = tok->previous();
|
tok = tok1;
|
||||||
previous->deleteNext();
|
}
|
||||||
previous->deleteNext();
|
else
|
||||||
|
tok1->deleteThis();
|
||||||
|
tok->deleteThis();
|
||||||
|
if (tok->next())
|
||||||
|
tok->deleteThis();
|
||||||
|
if (!tok->next())
|
||||||
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
tok = tok1->next();
|
tok = tok1->next();
|
||||||
|
@ -4357,6 +4357,24 @@ private:
|
|||||||
const char expected[] = "struct ABC : public XYZ { struct Anonymous0 { } ; Anonymous0 def ; } ;";
|
const char expected[] = "struct ABC : public XYZ { struct Anonymous0 { } ; Anonymous0 def ; } ;";
|
||||||
ASSERT_EQUALS(expected, tok(code, false));
|
ASSERT_EQUALS(expected, tok(code, false));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
{
|
||||||
|
const char code[] = "struct { int x; }; int y;";
|
||||||
|
const char expected[] = "int x ; int y ;";
|
||||||
|
ASSERT_EQUALS(expected, tok(code, false));
|
||||||
|
}
|
||||||
|
|
||||||
|
{
|
||||||
|
const char code[] = "struct { int x; };";
|
||||||
|
const char expected[] = "int x ; ;";
|
||||||
|
ASSERT_EQUALS(expected, tok(code, false));
|
||||||
|
}
|
||||||
|
|
||||||
|
{
|
||||||
|
const char code[] = "struct { };";
|
||||||
|
const char expected[] = ";";
|
||||||
|
ASSERT_EQUALS(expected, tok(code, false));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user