Skip to content

Commit e8b3723

Browse files
Fix #11378 internalAstError regressions (iscpp11init) (danmar#4580)
1 parent 8fb8e06 commit e8b3723

File tree

2 files changed

+14
-3
lines changed

2 files changed

+14
-3
lines changed

lib/tokenlist.cpp

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -692,7 +692,7 @@ static bool iscpp11init_impl(const Token * const tok)
692692
return true;
693693
const Token *prev = nameToken;
694694
while (Token::Match(prev, "%name%|::|:|<|>|,")) {
695-
if (Token::Match(prev, "class|struct"))
695+
if (Token::Match(prev, "class|struct|union|enum"))
696696
return false;
697697

698698
prev = prev->previous();
@@ -996,8 +996,12 @@ static void compilePrecedence2(Token *&tok, AST_state& state)
996996
Token* curlyBracket = roundBracket->link()->next();
997997
while (Token::Match(curlyBracket, "mutable|const|constexpr|consteval"))
998998
curlyBracket = curlyBracket->next();
999-
if (Token::simpleMatch(curlyBracket, "noexcept ("))
1000-
curlyBracket = curlyBracket->linkAt(1)->next();
999+
if (Token::simpleMatch(curlyBracket, "noexcept")) {
1000+
if (Token::simpleMatch(curlyBracket->next(), "("))
1001+
curlyBracket = curlyBracket->linkAt(1)->next();
1002+
else
1003+
curlyBracket = curlyBracket->next();
1004+
}
10011005
if (curlyBracket && curlyBracket->originalName() == "->")
10021006
curlyBracket = findTypeEnd(curlyBracket->next());
10031007
if (curlyBracket && curlyBracket->str() == "{") {

test/testtokenize.cpp

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6533,6 +6533,9 @@ class TestTokenizer : public TestFixture {
65336533
" return a < b;\n"
65346534
" });\n"
65356535
"}\n"));
6536+
6537+
// #11378
6538+
ASSERT_EQUALS("gT{(&[{= 0return", testAst("auto g = T{ [&]() noexcept -> int { return 0; } };"));
65366539
}
65376540

65386541
void astcase() {
@@ -7493,6 +7496,10 @@ class TestTokenizer : public TestFixture {
74937496
testIsCpp11init("namespace { TEST(a, b) {} }", // anonymous namespace
74947497
"{ TEST",
74957498
TokenImpl::Cpp11init::NOINIT);
7499+
7500+
testIsCpp11init("enum { e = decltype(s)::i };",
7501+
"{ e",
7502+
TokenImpl::Cpp11init::NOINIT);
74967503
#undef testIsCpp11init
74977504
}
74987505
};

0 commit comments

Comments
 (0)