From 152660119fb14f3c955b37e52dea49b321a51d4a Mon Sep 17 00:00:00 2001 From: chrchr-github Date: Wed, 10 Jun 2026 22:51:27 +0200 Subject: [PATCH] Fix #11861 Syntax Error: AST broken for C++20 ranges --- lib/tokenlist.cpp | 2 ++ test/testtokenize.cpp | 1 + 2 files changed, 3 insertions(+) diff --git a/lib/tokenlist.cpp b/lib/tokenlist.cpp index f98335badb7..5921621fed2 100644 --- a/lib/tokenlist.cpp +++ b/lib/tokenlist.cpp @@ -1696,6 +1696,8 @@ static Token * createAstAtToken(Token *tok) tok->next()->astOperand1(tok); tok->next()->astOperand2(colon); + createAstAtTokenInner(colon, tok->linkAt(1), cpp); + return decl; } } diff --git a/test/testtokenize.cpp b/test/testtokenize.cpp index 5f4d59503e2..ffe0fc84c62 100644 --- a/test/testtokenize.cpp +++ b/test/testtokenize.cpp @@ -6662,6 +6662,7 @@ class TestTokenizer : public TestFixture { ASSERT_EQUALS("foria:( asize.(", testAst("for(decltype(a.size()) i:a);")); ASSERT_EQUALS("forec0{([,(:( fb.return", testAst("for (auto e : c(0, [](auto f) { return f->b; }));")); // #10802 ASSERT_EQUALS("forvar1{;;(", testAst("for(int var{1};;)")); // #12867 + ASSERT_EQUALS("forxg{([(:( si.return", testAst("for (auto [x] : g([](S s) { return s.i; })) {}")); // #11861 // for with initializer (c++20) ASSERT_EQUALS("forab=ca:;(", testAst("for(a=b;int c:a)"));