diff --git a/lib/tokenize.cpp b/lib/tokenize.cpp index 4b24c1d19..0e9c54d4a 100644 --- a/lib/tokenize.cpp +++ b/lib/tokenize.cpp @@ -9363,8 +9363,11 @@ void Tokenizer::simplifyBitfields() if (tok->next()->str() == "const") offset = 1; - Token::eraseTokens(tok->tokAt(0), tok->tokAt(5 + offset)); - tok = tok->previous(); + if (tok->strAt(3 + offset) != "{") + { + Token::eraseTokens(tok->tokAt(0), tok->tokAt(5 + offset)); + tok = tok->previous(); + } } if (last && last->str() == ",") diff --git a/test/testtokenize.cpp b/test/testtokenize.cpp index 0978075b7..31e017855 100644 --- a/test/testtokenize.cpp +++ b/test/testtokenize.cpp @@ -296,6 +296,7 @@ private: TEST_CASE(bitfields6); // ticket #2595 TEST_CASE(bitfields7); // ticket #1987 TEST_CASE(bitfields8); + TEST_CASE(bitfields9); // ticket #2706 TEST_CASE(microsoftMFC); @@ -5373,6 +5374,19 @@ private: ASSERT_EQUALS("", errout.str()); } + void bitfields9() // ticket #2706 + { + const char code[] = "void f() {\n" + " goto half;\n" + "half:\n" + " {\n" + " ;\n" + " }\n" + "};"; + tokenizeAndStringify(code,false); + ASSERT_EQUALS("", errout.str()); + } + void microsoftMFC() { const char code1[] = "class MyDialog : public CDialog { DECLARE_MESSAGE_MAP() private: CString text; };";