Fixed #1976 (False Positives with unions)
This commit is contained in:
parent
fb4fce466e
commit
1938b8a423
|
@ -7996,10 +7996,21 @@ void Tokenizer::simplifyStructDecl()
|
||||||
{
|
{
|
||||||
unsigned int count = 0;
|
unsigned int count = 0;
|
||||||
|
|
||||||
|
// Skip simplification of unions in class definition
|
||||||
|
std::list<bool> skip;
|
||||||
|
skip.push_back(false);
|
||||||
|
|
||||||
for (Token *tok = _tokens; tok; tok = tok->next())
|
for (Token *tok = _tokens; tok; tok = tok->next())
|
||||||
{
|
{
|
||||||
Token *restart;
|
Token *restart;
|
||||||
|
|
||||||
|
if (tok->str() == "{")
|
||||||
|
skip.push_back(!Token::Match(tok->previous(), "const|)"));
|
||||||
|
else if (tok->str() == "}" && !skip.empty())
|
||||||
|
skip.pop_back();
|
||||||
|
else if (!skip.empty() && skip.back() && tok->str() == "union")
|
||||||
|
continue;
|
||||||
|
|
||||||
// check for named struct/union
|
// check for named struct/union
|
||||||
if (Token::Match(tok, "struct|union %type% :|{"))
|
if (Token::Match(tok, "struct|union %type% :|{"))
|
||||||
{
|
{
|
||||||
|
|
|
@ -213,6 +213,7 @@ private:
|
||||||
TEST_CASE(vardecl12);
|
TEST_CASE(vardecl12);
|
||||||
TEST_CASE(vardecl_stl);
|
TEST_CASE(vardecl_stl);
|
||||||
TEST_CASE(vardecl_template);
|
TEST_CASE(vardecl_template);
|
||||||
|
TEST_CASE(vardecl_union);
|
||||||
TEST_CASE(volatile_variables);
|
TEST_CASE(volatile_variables);
|
||||||
TEST_CASE(syntax_error);
|
TEST_CASE(syntax_error);
|
||||||
TEST_CASE(syntax_error_templates);
|
TEST_CASE(syntax_error_templates);
|
||||||
|
@ -3536,6 +3537,13 @@ private:
|
||||||
ASSERT_EQUALS(res1, tokenizeAndStringify(code1));
|
ASSERT_EQUALS(res1, tokenizeAndStringify(code1));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void vardecl_union()
|
||||||
|
{
|
||||||
|
// ticket #1976
|
||||||
|
const char code1[] = "class Fred { public: union { int a ; int b ; } ; } ;";
|
||||||
|
ASSERT_EQUALS(code1, tokenizeAndStringify(code1));
|
||||||
|
}
|
||||||
|
|
||||||
void vardec_static()
|
void vardec_static()
|
||||||
{
|
{
|
||||||
{
|
{
|
||||||
|
|
Loading…
Reference in New Issue