summary refs log tree commit diff stats
diff options
context:
space:
mode:
authorLemonBoy <thatlemon@gmail.com>2018-09-17 15:33:44 +0200
committerLemonBoy <thatlemon@gmail.com>2018-09-17 15:33:44 +0200
commit3588240226187152f618febb8c01a034084ce772 (patch)
treecec26305abcfa4517f4ef04f4c1c8e1e0f5ce0bf
parent6dc6ea41468dc99c8826b03b512af8f9a46e660d (diff)
downloadNim-3588240226187152f618febb8c01a034084ce772.tar.gz
Always check the deduced type validity for result
Fixes #8259
-rw-r--r--compiler/semexprs.nim2
-rw-r--r--tests/openarray/t8259.nim7
2 files changed, 9 insertions, 0 deletions
diff --git a/compiler/semexprs.nim b/compiler/semexprs.nim
index 43f04fc9f..0139de3a0 100644
--- a/compiler/semexprs.nim
+++ b/compiler/semexprs.nim
@@ -1560,6 +1560,8 @@ proc semAsgn(c: PContext, n: PNode; mode=asgnNormal): PNode =
           rhsTyp = rhsTyp.lastSon
         if cmpTypes(c, lhs.typ, rhsTyp) in {isGeneric, isEqual}:
           internalAssert c.config, c.p.resultSym != nil
+          # Make sure the type is valid for the result variable
+          typeAllowedCheck(c.config, n.info, rhsTyp, skResult)
           lhs.typ = rhsTyp
           c.p.resultSym.typ = rhsTyp
           c.p.owner.typ.sons[0] = rhsTyp
diff --git a/tests/openarray/t8259.nim b/tests/openarray/t8259.nim
new file mode 100644
index 000000000..40ff2b2f1
--- /dev/null
+++ b/tests/openarray/t8259.nim
@@ -0,0 +1,7 @@
+discard """
+  line: 6
+  errormsg: "invalid type: 'openarray[int]' for result"
+"""
+
+proc foo(a: openArray[int]):auto = a
+echo foo(toOpenArray([1, 2], 0, 2))