summary refs log tree commit diff stats
diff options
context:
space:
mode:
authorringabout <43030857+ringabout@users.noreply.github.com>2023-08-31 19:04:32 +0800
committerGitHub <noreply@github.com>2023-08-31 19:04:32 +0800
commit5bd1afc3f9716fed833b7bd251ee45479b78a950 (patch)
tree6187573153e3590c9030b99d7707a9bbb40f49db
parentdfb3a88cc3a077b452c90e63af3dec21ba822181 (diff)
downloadNim-5bd1afc3f9716fed833b7bd251ee45479b78a950.tar.gz
fixes #17197; fixes #22560; fixes the dest of newSeqOfCap in refc (#22594)
-rw-r--r--compiler/ccgexprs.nim1
-rw-r--r--tests/collections/tseq.nim17
2 files changed, 18 insertions, 0 deletions
diff --git a/compiler/ccgexprs.nim b/compiler/ccgexprs.nim
index 2492eebae..8bd0b8721 100644
--- a/compiler/ccgexprs.nim
+++ b/compiler/ccgexprs.nim
@@ -1468,6 +1468,7 @@ proc genNewSeqOfCap(p: BProc; e: PNode; d: var TLoc) =
       getSeqPayloadType(p.module, seqtype),
     ])
   else:
+    if d.k == locNone: d = getTemp(p, e.typ, needsInit=false) # bug #22560
     putIntoDest(p, d, e, ropecg(p.module,
                 "($1)#nimNewSeqOfCap($2, $3)", [
                 getTypeDesc(p.module, seqtype),
diff --git a/tests/collections/tseq.nim b/tests/collections/tseq.nim
index 5fca784e7..0f8084c78 100644
--- a/tests/collections/tseq.nim
+++ b/tests/collections/tseq.nim
@@ -223,3 +223,20 @@ for i in 0..100:
   var test = newSeqOfCap[uint32](1)
   test.setLen(1)
   doAssert test[0] == 0, $(test[0], i)
+
+
+# bug #22560
+doAssert len(newSeqOfCap[int](42)) == 0
+
+block: # bug #17197
+  type Matrix = seq[seq[int]]
+
+  proc needlemanWunsch(sequence1: string, sequence2: string, gap_penal: int8, match: int8, indel_penal: int8): bool =
+    let seq2_len = sequence2.len
+
+    var grid: Matrix
+    for i in sequence1:
+      grid.add(newSeqOfCap[seq[int]](seq2_len))
+    result = true
+
+  doAssert needlemanWunsch("ABC", "DEFG", 1, 2, 3)