summary refs log tree commit diff stats
diff options
context:
space:
mode:
-rw-r--r--compiler/sigmatch.nim4
-rw-r--r--tests/generics/tspecialized_procvar.nim17
2 files changed, 19 insertions, 2 deletions
diff --git a/compiler/sigmatch.nim b/compiler/sigmatch.nim
index 784294839..354cf965e 100644
--- a/compiler/sigmatch.nim
+++ b/compiler/sigmatch.nim
@@ -167,12 +167,12 @@ proc sumGeneric(t: PType): int =
       t = t.lastSon
       if t.kind == tyEmpty: break
       inc result
-    of tyGenericInvocation, tyTuple:
+    of tyGenericInvocation, tyTuple, tyProc:
       result += ord(t.kind == tyGenericInvocation)
       for i in 0 .. <t.len: result += t.sons[i].sumGeneric
       break
     of tyGenericParam, tyExpr, tyStatic, tyStmt: break
-    of tyBool, tyChar, tyEnum, tyObject, tyProc, tyPointer,
+    of tyBool, tyChar, tyEnum, tyObject, tyPointer,
         tyString, tyCString, tyInt..tyInt64, tyFloat..tyFloat128,
         tyUInt..tyUInt64:
       return isvar
diff --git a/tests/generics/tspecialized_procvar.nim b/tests/generics/tspecialized_procvar.nim
new file mode 100644
index 000000000..4bdc94a66
--- /dev/null
+++ b/tests/generics/tspecialized_procvar.nim
@@ -0,0 +1,17 @@
+discard """
+  output: '''concrete 88'''
+"""
+
+# Another regression triggered by changed closure computations:
+
+proc foo[T](x: proc(): T) =
+  echo "generic ", x()
+
+proc foo(x: proc(): int) =
+  echo "concrete ", x()
+
+# note the following 'proc' is not .closure!
+foo(proc (): auto {.nimcall.} = 88)
+
+# bug #3499 last snippet fixed
+# bug 705  last snippet fixed