diff --git a/src/dmd/parse.d b/src/dmd/parse.d index 3183c8e36ec5..7480d1b1b08e 100644 --- a/src/dmd/parse.d +++ b/src/dmd/parse.d @@ -6202,14 +6202,16 @@ LagainStc: AST.Expressions cases; // array of Expression's AST.Expression last = null; - while (1) + nextToken(); + do { - nextToken(); exp = parseAssignExp(); cases.push(exp); if (token.value != TOK.comma) break; + nextToken(); //comma } + while (token.value != TOK.colon && token.value != TOK.endOfFile); check(TOK.colon); /* case exp: .. case last: diff --git a/test/compilable/testparse.d b/test/compilable/testparse.d index 99d9e8e46436..99378a9df53e 100644 --- a/test/compilable/testparse.d +++ b/test/compilable/testparse.d @@ -179,3 +179,15 @@ void testIfConditionWithSTCandType() // https://issues.dlang.org/show_bug.cgi?id=20791 extern(C++, "foo", ) struct S {} + +/***************************************************/ +// https://issues.dlang.org/show_bug.cgi?id=22019 +void test22019() +{ + final switch (1) + { + case 1,: + case 2,3,: + break; + } +}