diff options
author | Bung <crc32@qq.com> | 2022-10-02 00:17:07 +0800 |
---|---|---|
committer | GitHub <noreply@github.com> | 2022-10-01 18:17:07 +0200 |
commit | cbd9fee22ac7063c66cc9aa38f20e78df082e387 (patch) | |
tree | f70e1b4678b55237e70304f0767f1daf02d5eeb8 | |
parent | 8d47bf1822f7d7886ff62f6d14abe405f9f68ed7 (diff) | |
download | Nim-cbd9fee22ac7063c66cc9aa38f20e78df082e387.tar.gz |
fix #19678 Broken behavior with string ranges in case labels (#20475)
* fix #19678 Broken behavior with string ranges in case labels * Update compiler/semtypes.nim Co-authored-by: Andreas Rumpf <rumpf_a@web.de> Co-authored-by: Andreas Rumpf <rumpf_a@web.de>
-rw-r--r-- | compiler/semtypes.nim | 2 | ||||
-rw-r--r-- | tests/range/t19678.nim | 17 |
2 files changed, 19 insertions, 0 deletions
diff --git a/compiler/semtypes.nim b/compiler/semtypes.nim index d033d5f44..b732eff9c 100644 --- a/compiler/semtypes.nim +++ b/compiler/semtypes.nim @@ -554,6 +554,8 @@ proc semBranchRange(c: PContext, t, a, b: PNode, covered: var Int128): PNode = checkMinSonsLen(t, 1, c.config) let ac = semConstExpr(c, a) let bc = semConstExpr(c, b) + if ac.kind in {nkStrLit..nkTripleStrLit} or bc.kind in {nkStrLit..nkTripleStrLit}: + localError(c.config, b.info, "range of string is invalid") let at = fitNode(c, t[0].typ, ac, ac.info).skipConvTakeType let bt = fitNode(c, t[0].typ, bc, bc.info).skipConvTakeType diff --git a/tests/range/t19678.nim b/tests/range/t19678.nim new file mode 100644 index 000000000..88f7eff89 --- /dev/null +++ b/tests/range/t19678.nim @@ -0,0 +1,17 @@ +discard """ + cmd: "nim check --hints:off $file" + errormsg: "" + nimout: ''' +t19678.nim(13, 13) Error: range of string is invalid + + + +''' +""" + +case "5": + of "0" .. "9": + discard + else: + discard + |