diff --git a/lib/tokenize.cpp b/lib/tokenize.cpp index 50a60c67d..eaf7b8add 100644 --- a/lib/tokenize.cpp +++ b/lib/tokenize.cpp @@ -2821,7 +2821,11 @@ void Tokenizer::simplifyCaseRange() tok->next()->str("case"); for (char i = end - 1; i > start; i--) { tok->insertToken(":"); - tok->insertToken(std::string(1, '\'') + i + '\''); + if (i == '\\') { + tok->insertToken(std::string("\'\\") + i + '\''); + } else { + tok->insertToken(std::string(1, '\'') + i + '\''); + } tok->insertToken("case"); } } diff --git a/test/testtokenize.cpp b/test/testtokenize.cpp index b702a008e..209094064 100644 --- a/test/testtokenize.cpp +++ b/test/testtokenize.cpp @@ -7114,6 +7114,8 @@ private: ASSERT_EQUALS("void f ( ) { switch ( x ) { case 'a' : case 'b' : case 'c' : ; } }", tokenizeAndStringify("void f() { switch(x) { case 'a' ... 'c': } }")); ASSERT_EQUALS("void f ( ) { switch ( x ) { case 'c' . . . 'a' : ; } }", tokenizeAndStringify("void f() { switch(x) { case 'c' ... 'a': } }")); + + ASSERT_EQUALS("void f ( ) { switch ( x ) { case '[' : case '\\\\' : case ']' : ; } }", tokenizeAndStringify("void f() { switch(x) { case '[' ... ']': } }")); } void prepareTernaryOpForAST() {