diff options
-rw-r--r-- | compiler/sigmatch.nim | 4 | ||||
-rw-r--r-- | tests/generics/tspecialized_procvar.nim | 17 |
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 |