summary refs log tree commit diff stats
diff options
context:
space:
mode:
authorBung <crc32@qq.com>2022-10-02 00:17:07 +0800
committerGitHub <noreply@github.com>2022-10-01 18:17:07 +0200
commitcbd9fee22ac7063c66cc9aa38f20e78df082e387 (patch)
treef70e1b4678b55237e70304f0767f1daf02d5eeb8
parent8d47bf1822f7d7886ff62f6d14abe405f9f68ed7 (diff)
downloadNim-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.nim2
-rw-r--r--tests/range/t19678.nim17
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
+