summary refs log tree commit diff stats
diff options
context:
space:
mode:
authorAndreas Rumpf <rumpf_a@web.de>2021-09-02 17:15:11 +0200
committerGitHub <noreply@github.com>2021-09-02 17:15:11 +0200
commita7cae2bda24871c55348173816a43144b9e668a5 (patch)
tree9c94f84b2c0c5fe7696a080086dcad3be6118647
parent69cabaa81cf69593a8a42554fe70cce53ec8663d (diff)
downloadNim-a7cae2bda24871c55348173816a43144b9e668a5.tar.gz
fixes #16325 [backport:1.4] (#18784)
-rw-r--r--compiler/sigmatch.nim3
-rw-r--r--tests/overload/tproc_types_dont_like_subtypes.nim20
2 files changed, 21 insertions, 2 deletions
diff --git a/compiler/sigmatch.nim b/compiler/sigmatch.nim
index 465a9a51d..9cf18277f 100644
--- a/compiler/sigmatch.nim
+++ b/compiler/sigmatch.nim
@@ -595,8 +595,7 @@ proc procParamTypeRel(c: var TCandidate, f, a: PType): TTypeRelation =
     # if f is metatype.
     result = typeRel(c, f, a)
 
-  #               v--- is this correct?
-  if result <= isIntConv or inconsistentVarTypes(f, a):
+  if result <= isSubrange or inconsistentVarTypes(f, a):
     result = isNone
 
   #if result == isEqual:
diff --git a/tests/overload/tproc_types_dont_like_subtypes.nim b/tests/overload/tproc_types_dont_like_subtypes.nim
new file mode 100644
index 000000000..d322f41be
--- /dev/null
+++ b/tests/overload/tproc_types_dont_like_subtypes.nim
@@ -0,0 +1,20 @@
+discard """
+  errormsg: "got <B, proc (b: B){.closure, gcsafe, locks: 0.}>"
+  line: 20
+"""
+
+type
+  A = ref object of RootObj
+  B = ref object of A
+
+  P = proc (a: A)
+
+# bug #16325
+
+proc doThings(a: A, p: P) =
+  p(a)
+
+var x = proc (b: B) {.closure.} =
+  echo "B"
+
+doThings(B(), x)