summary refs log tree commit diff stats
diff options
context:
space:
mode:
authorLemonBoy <LemonBoy@users.noreply.github.com>2019-01-21 17:27:36 +0100
committerAndreas Rumpf <rumpf_a@web.de>2019-01-21 17:27:36 +0100
commitae5d8fbd9d6b0c6469c2245da8a54d7b4c12f54f (patch)
tree56a5cd0237a34b1f8d13d6e64816816acd22080b
parenta4cdd25b19b0ec98826a01e1f57da1c2fb8920af (diff)
downloadNim-ae5d8fbd9d6b0c6469c2245da8a54d7b4c12f54f.tar.gz
Proper check for tyStatic[T] -> U conversions (#10382)
Drop the outer tyStatic shell then perform the check.

Fixes #7609
-rw-r--r--compiler/semexprs.nim2
-rw-r--r--tests/statictypes/tstatictypes.nim5
2 files changed, 7 insertions, 0 deletions
diff --git a/compiler/semexprs.nim b/compiler/semexprs.nim
index 5e1e4cbbd..82f948492 100644
--- a/compiler/semexprs.nim
+++ b/compiler/semexprs.nim
@@ -108,6 +108,8 @@ const
 
 proc checkConvertible(c: PContext, castDest, src: PType): TConvStatus =
   result = convOK
+  # We're interested in the inner type and not in the static tag
+  var src = src.skipTypes({tyStatic})
   if sameType(castDest, src) and castDest.sym == src.sym:
     # don't annoy conversions that may be needed on another processor:
     if castDest.kind notin IntegralTypes+{tyRange}:
diff --git a/tests/statictypes/tstatictypes.nim b/tests/statictypes/tstatictypes.nim
index 9888165cc..b7cde6124 100644
--- a/tests/statictypes/tstatictypes.nim
+++ b/tests/statictypes/tstatictypes.nim
@@ -132,3 +132,8 @@ block:
   var x = foo(y, 10, 15, [1, 2, 3])
   doAssert x == (20, 10, 15, 3)
 
+# #7609
+block:
+  type
+    Coord[N: static[int]] = tuple[col, row: range[0'i8 .. (N.int8-1)]]
+    Point[N: static[int]] = range[0'i16 .. N.int16 * N.int16 - 1]