diff --git a/lib/tokenize.cpp b/lib/tokenize.cpp index 66dfc49a003..a875bba0df6 100644 --- a/lib/tokenize.cpp +++ b/lib/tokenize.cpp @@ -10046,7 +10046,7 @@ void Tokenizer::simplifyBitfields() !Token::Match(tok->next(), "case|public|protected|private|class|struct") && !Token::simpleMatch(tok->tokAt(2), "default :")) { Token *tok1 = typeTok->next(); - if (Token::Match(tok1, "%name% : %num% [;=]")) + if (Token::Match(tok1, "%name% : %num% [;=,]")) if (!tok1->setBits(MathLib::toBigNumber(tok1->tokAt(2)))) tooLargeError(tok1->tokAt(2)); if (tok1 && tok1->tokAt(2) && diff --git a/test/testtokenize.cpp b/test/testtokenize.cpp index e3eb538e9e4..aaed28f4de6 100644 --- a/test/testtokenize.cpp +++ b/test/testtokenize.cpp @@ -310,6 +310,7 @@ class TestTokenizer : public TestFixture { TEST_CASE(bitfields18); TEST_CASE(bitfields19); // ticket #13733 TEST_CASE(bitfields20); + TEST_CASE(bitfields21); TEST_CASE(simplifyNamespaceStd); @@ -4899,6 +4900,16 @@ class TestTokenizer : public TestFixture { ASSERT_EQUALS("struct S { volatile :: uint32_t a ; } ;", tokenizeAndStringify(code)); } + void bitfields21() { + const char code[] = "struct S { uint32_t a : 1, b : 1; };"; + SimpleTokenizer tokenizer(settings0, *this); + ASSERT(tokenizer.tokenize(code)); + const Token *a = Token::findsimplematch(tokenizer.tokens(), "a"); + ASSERT_EQUALS(1, a->bits()); + const Token *b = Token::findsimplematch(tokenizer.tokens(), "b"); + ASSERT_EQUALS(1, b->bits()); + } + void simplifyNamespaceStd() { const char *expected;