diff options
author | Giuliano Mega <giuliano.mega@gmail.com> | 2024-01-18 10:40:22 -0300 |
---|---|---|
committer | GitHub <noreply@github.com> | 2024-01-18 14:40:22 +0100 |
commit | 473f259268d03f87874c674c08c74cf32da11d4a (patch) | |
tree | 1afa71d34414324ca5bc7133d3d142271f24888b | |
parent | 2425f4559cc5e8a96cf0dccea72817a782918de0 (diff) | |
download | Nim-473f259268d03f87874c674c08c74cf32da11d4a.tar.gz |
Fix reset code gen for range types (#22462, #23214) (#23215)
This PR modifies `specializeResetT` so that it generates the proper reset code for range types. I've tested it in the examples for issues #23214 and #22462 as well as our codebase, and it seems to fix the issues I had been experiencing.
-rw-r--r-- | compiler/ccgreset.nim | 4 | ||||
-rw-r--r-- | tests/ccgbugs/t22462.nim | 20 |
2 files changed, 22 insertions, 2 deletions
diff --git a/compiler/ccgreset.nim b/compiler/ccgreset.nim index e4abcfc8c..4af690e35 100644 --- a/compiler/ccgreset.nim +++ b/compiler/ccgreset.nim @@ -81,7 +81,7 @@ proc specializeResetT(p: BProc, accessor: Rope, typ: PType) = lineCg(p, cpsStmts, "$1.ClP_0 = NIM_NIL;$n", [accessor]) else: lineCg(p, cpsStmts, "$1 = NIM_NIL;$n", [accessor]) - of tyChar, tyBool, tyEnum, tyInt..tyUInt64: + of tyChar, tyBool, tyEnum, tyRange, tyInt..tyUInt64: lineCg(p, cpsStmts, "$1 = 0;$n", [accessor]) of tyCstring, tyPointer, tyPtr, tyVar, tyLent: lineCg(p, cpsStmts, "$1 = NIM_NIL;$n", [accessor]) @@ -95,7 +95,7 @@ proc specializeResetT(p: BProc, accessor: Rope, typ: PType) = else: raiseAssert "unexpected set type kind" of tyNone, tyEmpty, tyNil, tyUntyped, tyTyped, tyGenericInvocation, - tyGenericParam, tyOrdinal, tyRange, tyOpenArray, tyForward, tyVarargs, + tyGenericParam, tyOrdinal, tyOpenArray, tyForward, tyVarargs, tyUncheckedArray, tyProxy, tyBuiltInTypeClass, tyUserTypeClass, tyUserTypeClassInst, tyCompositeTypeClass, tyAnd, tyOr, tyNot, tyAnything, tyStatic, tyFromExpr, tyConcept, tyVoid, tyIterable: diff --git a/tests/ccgbugs/t22462.nim b/tests/ccgbugs/t22462.nim new file mode 100644 index 000000000..9adfbb19b --- /dev/null +++ b/tests/ccgbugs/t22462.nim @@ -0,0 +1,20 @@ +discard """ + action: "run" + output: ''' +1 +1 +1 +''' + matrix: "--mm:refc" + targets: "c cpp" +""" + +type Object = object + someComplexType: seq[int] + index: Natural + +func newObject(): Object = result.index.inc + +for i in 1..3: + let o = newObject() + echo o.index |