Skip to content

Commit bd95efc

Browse files
Fix internal error "Unexpected tokens in initializer" with anonymous namespace (#4577)
Co-authored-by: Gerbo Engels <gerbo.engels@ortec-finance.com>
1 parent e45e5f9 commit bd95efc

2 files changed

Lines changed: 8 additions & 1 deletion

File tree

lib/tokenlist.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -675,7 +675,7 @@ static bool iscpp11init_impl(const Token * const tok)
675675
return false;
676676
if (Token::simpleMatch(nameToken->previous(), ". void {") && nameToken->previous()->originalName() == "->")
677677
return false; // trailing return type. The only function body that can contain no semicolon is a void function.
678-
if (Token::simpleMatch(nameToken->previous(), "namespace"))
678+
if (Token::simpleMatch(nameToken->previous(), "namespace") || Token::simpleMatch(nameToken, "namespace") /*anonymous namespace*/)
679679
return false;
680680
if (endtok != nullptr && !Token::Match(nameToken, "return|:")) {
681681
// If there is semicolon between {..} this is not a initlist

test/testtokenize.cpp

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7483,6 +7483,13 @@ class TestTokenizer : public TestFixture {
74837483
testIsCpp11init("class X{}", // forgotten ; so not properly recognized as a class
74847484
"{ }",
74857485
TokenImpl::Cpp11init::CPP11INIT);
7486+
7487+
testIsCpp11init("namespace abc::def { TEST(a, b) {} }",
7488+
"{ TEST",
7489+
TokenImpl::Cpp11init::NOINIT);
7490+
testIsCpp11init("namespace { TEST(a, b) {} }", // anonymous namespace
7491+
"{ TEST",
7492+
TokenImpl::Cpp11init::NOINIT);
74867493
#undef testIsCpp11init
74877494
}
74887495
};

0 commit comments

Comments
 (0)