diff --git a/lib/tokenize.cpp b/lib/tokenize.cpp index 005ecfd609a..2f98a332676 100644 --- a/lib/tokenize.cpp +++ b/lib/tokenize.cpp @@ -4709,6 +4709,11 @@ void Tokenizer::setVarIdPass1() if (!isC() && Token::simpleMatch(tok2, "const new")) continue; + if (tok->isKeyword() && Token::simpleMatch(tok, "static_assert (")) { + tok = tok->linkAt(1); + continue; + } + bool decl; if (cpp && mSettings.standards.cpp >= Standards::CPP17 && Token::Match(tok, "[(;{}] const| auto &|&&| [")) { // Structured bindings diff --git a/test/testvarid.cpp b/test/testvarid.cpp index c6dbc626c8c..a5037526f21 100644 --- a/test/testvarid.cpp +++ b/test/testvarid.cpp @@ -102,6 +102,7 @@ class TestVarID : public TestFixture { TEST_CASE(varid69); TEST_CASE(varid70); // #12660 - function TEST_CASE(varid71); // #12676 - wrong varid in uninstantiated templated constructor + TEST_CASE(varid72); TEST_CASE(varid_for_1); TEST_CASE(varid_for_2); TEST_CASE(varid_for_3); @@ -1394,6 +1395,12 @@ class TestVarID : public TestFixture { ASSERT_EQUALS(expected, tokenize(code)); } + void varid72() { + const char code[] = "static_assert(true && false);\n"; + const char expected[] = "1: static_assert ( true && false ) ;\n"; + ASSERT_EQUALS(expected, tokenize(code)); + } + void varid_for_1() { const char code[] = "void foo(int a, int b) {\n" " for (int a=1,b=2;;) {}\n"