diff options
author | metagn <metagngn@gmail.com> | 2024-01-24 00:00:34 +0300 |
---|---|---|
committer | GitHub <noreply@github.com> | 2024-01-23 22:00:34 +0100 |
commit | ee984f8836740cb64d88c622ff652e396751edee (patch) | |
tree | 1a62e0aba3eda4a92d3af19402a987a3029b284f | |
parent | be0b8472130112ad570a6720a0e3a34e67936619 (diff) | |
download | Nim-ee984f8836740cb64d88c622ff652e396751edee.tar.gz |
account for nil return type in tyProc sumGeneric (#23250)
fixes #23249
-rw-r--r-- | compiler/sigmatch.nim | 3 | ||||
-rw-r--r-- | tests/overload/t23249.nim | 17 |
2 files changed, 19 insertions, 1 deletions
diff --git a/compiler/sigmatch.nim b/compiler/sigmatch.nim index b4d875981..a0de33ed5 100644 --- a/compiler/sigmatch.nim +++ b/compiler/sigmatch.nim @@ -246,7 +246,8 @@ proc sumGeneric(t: PType): int = result += sumGeneric(a) break of tyProc: - result += sumGeneric(t.returnType) + if t.returnType != nil: + result += sumGeneric(t.returnType) for _, a in t.paramTypes: result += sumGeneric(a) break diff --git a/tests/overload/t23249.nim b/tests/overload/t23249.nim new file mode 100644 index 000000000..f4657833b --- /dev/null +++ b/tests/overload/t23249.nim @@ -0,0 +1,17 @@ +# issue #23249 + +type Control* = object +proc onAction*(c: Control, handler: proc(e: int) {.gcsafe.}) = discard +proc onAction*(c: Control, handler: proc() {.gcsafe.}) = discard + +template setControlHandlerBlock(c: Control, p: untyped, a: untyped) = + when compiles(c.p(nil)): + c.p() do() {.gcsafe.}: a + else: + c.p = proc() {.gcsafe.} = + a + +proc mkLayout() = + var b: Control + setControlHandlerBlock(b, onAction): + echo "hi" |