summary refs log tree commit diff stats
diff options
context:
space:
mode:
-rw-r--r--compiler/sigmatch.nim6
-rw-r--r--tests/typerel/tstr_as_openarray.nim22
2 files changed, 28 insertions, 0 deletions
diff --git a/compiler/sigmatch.nim b/compiler/sigmatch.nim
index 7ea2c3d6f..f506e3ff5 100644
--- a/compiler/sigmatch.nim
+++ b/compiler/sigmatch.nim
@@ -748,6 +748,12 @@ proc typeRel(c: var TCandidate, f, aOrig: PType, doBind = true): TTypeRelation =
         result = isConvertible
       elif typeRel(c, base(f), a.sons[0]) >= isGeneric:
         result = isConvertible
+    of tyString:
+      if f.kind == tyOpenArray:
+        if f.sons[0].kind == tyChar:
+          result = isConvertible
+        elif f.sons[0].kind == tyGenericParam and typeRel(c, base(f), base(a)) >= isGeneric:
+          result = isConvertible
     else: discard
   of tySequence:
     case a.kind
diff --git a/tests/typerel/tstr_as_openarray.nim b/tests/typerel/tstr_as_openarray.nim
new file mode 100644
index 000000000..fc28d6c93
--- /dev/null
+++ b/tests/typerel/tstr_as_openarray.nim
@@ -0,0 +1,22 @@
+discard """
+  output: '''success'''
+"""
+var s = "HI"
+
+proc x (zz: openarray[char]) =
+  discard
+
+x s
+
+proc z [T] (zz: openarray[T]) =
+  discard
+
+z s
+z([s,s,s])
+
+proc y [T] (arg: var openarray[T]) =
+  arg[0] = 'X'
+y s
+doAssert s == "XI"
+
+echo "success"