summary refs log tree commit diff stats
path: root/tests/array
diff options
context:
space:
mode:
authormetagn <metagngn@gmail.com>2024-01-18 23:14:27 +0300
committerGitHub <noreply@github.com>2024-01-18 21:14:27 +0100
commit3ab8b6b2cf4488c114284aa5ad5b7af0d4055312 (patch)
treee360389bd78ca1f3790c4934f2003773d2b1b999 /tests/array
parent8a38880ef7962fe4a3155449eb161eeffda0cda5 (diff)
downloadNim-3ab8b6b2cf4488c114284aa5ad5b7af0d4055312.tar.gz
error on large integer types as array index range (#23229)
fixes #17163, refs #23204

Types that aren't `tyRange` and are bigger than 16 bits, so `int32`,
`uint64`, `int` etc, are disallowed as array index range types.
`tyRange` is excluded because the max array size is backend independent
(except for the specific size of `high(uint64)` which crashes the
compiler) and so there should still be an escape hatch for people who
want bigger arrays.
Diffstat (limited to 'tests/array')
-rw-r--r--tests/array/tlargeindex.nim18
1 files changed, 18 insertions, 0 deletions
diff --git a/tests/array/tlargeindex.nim b/tests/array/tlargeindex.nim
new file mode 100644
index 000000000..61bcbd61d
--- /dev/null
+++ b/tests/array/tlargeindex.nim
@@ -0,0 +1,18 @@
+discard """
+  cmd: "nim check --hints:off $file"
+"""
+
+# issue #17163
+var e: array[int32, byte] #[tt.Error
+             ^ index type 'int32' for array is too large]#
+var f: array[uint32, byte] #[tt.Error
+             ^ index type 'uint32' for array is too large]#
+var g: array[int64, byte] #[tt.Error
+             ^ index type 'int64' for array is too large]#
+var h: array[uint64, byte] #[tt.Error
+             ^ index type 'uint64' for array is too large]#
+
+# crash in issue #23204
+proc y[N](): array[N, int] = default(array[N, int]) #[tt.Error
+                                           ^ index type 'int' for array is too large]#
+discard y[int]()