diff options
-rw-r--r-- | compiler/ccgexprs.nim | 1 | ||||
-rw-r--r-- | tests/ccgbugs/t9578.nim | 76 | ||||
-rw-r--r-- | tests/ccgbugs/xarray9578.nim | 7 | ||||
-rw-r--r-- | tests/ccgbugs/xoa9578.nim | 4 | ||||
-rw-r--r-- | tests/ccgbugs/xseq9578.nim | 7 | ||||
-rw-r--r-- | tests/ccgbugs/xtuple9578.nim | 7 | ||||
-rw-r--r-- | tests/ccgbugs/xua9578.nim | 7 |
7 files changed, 109 insertions, 0 deletions
diff --git a/compiler/ccgexprs.nim b/compiler/ccgexprs.nim index 244b96108..88a69b6a1 100644 --- a/compiler/ccgexprs.nim +++ b/compiler/ccgexprs.nim @@ -995,6 +995,7 @@ proc genBracketExpr(p: BProc; n: PNode; d: var TLoc) = of tyCString: genCStringElem(p, n, n.sons[0], n.sons[1], d) of tyTuple: genTupleElem(p, n, d) else: internalError(p.config, n.info, "expr(nkBracketExpr, " & $ty.kind & ')') + discard getTypeDesc(p.module, n.typ) proc isSimpleExpr(n: PNode): bool = # calls all the way down --> can stay expression based diff --git a/tests/ccgbugs/t9578.nim b/tests/ccgbugs/t9578.nim new file mode 100644 index 000000000..25b7b6695 --- /dev/null +++ b/tests/ccgbugs/t9578.nim @@ -0,0 +1,76 @@ +discard """ +output: ''' +@[(v: -1), (v: 2), (v: 3)] +@[(v: -1), (v: 2), (v: 3)] +[(v: -1), (v: 2), (v: 3)] +[(v: -1), (v: 2), (v: 3)] +((v: -1), (v: 2), (v: 3)) +((v: -1), (v: 2), (v: 3)) +@[(v: -1), (v: 2), (v: 3)] +@[(v: -1), (v: 2), (v: 3)] +@[(v: -1), (v: 2), (v: 3)] +''' +""" + +type mytype* = object + v:int + +proc f*(x:ptr mytype) = x.v = -1 + +func g(x:int):mytype = mytype(v:x) + + +import xseq9578 +block: + var x = @[1.g,2.g,3.g] + testSeq(x) + echo x +block: + var x = @[1.g,2.g,3.g] + var y = addr x + testSeq2(y) + echo x + + +import xarray9578 +block: + var x = [1.g,2.g,3.g] + testArray(x) + echo x +block: + var x = [1.g,2.g,3.g] + var y = addr x + testArray2(y) + echo x + + +import xtuple9578 +block: + var x = (1.g,2.g,3.g) + testTuple(x) + echo x +block: + var x = (1.g,2.g,3.g) + var y = addr x + testTuple2(y) + echo x + + +import xoa9578 +block: + var x = @[1.g,2.g,3.g] + testOpenArray(x) + echo x + + +import xua9578 +block: + var x = @[1.g,2.g,3.g] + var y = cast[ptr UncheckedArray[mytype]](addr x[0]) + testUncheckedArray(y[]) + echo x +block: + var x = @[1.g,2.g,3.g] + var y = cast[ptr UncheckedArray[mytype]](addr x[0]) + testUncheckedArray2(y) + echo x diff --git a/tests/ccgbugs/xarray9578.nim b/tests/ccgbugs/xarray9578.nim new file mode 100644 index 000000000..849f16821 --- /dev/null +++ b/tests/ccgbugs/xarray9578.nim @@ -0,0 +1,7 @@ +import t9578 + +proc testArray*(x: var array[3,mytype]) = + f(x[0].addr) + +proc testArray2*(x: var ptr array[3,mytype]) = + f(x[0].addr) diff --git a/tests/ccgbugs/xoa9578.nim b/tests/ccgbugs/xoa9578.nim new file mode 100644 index 000000000..94ef34519 --- /dev/null +++ b/tests/ccgbugs/xoa9578.nim @@ -0,0 +1,4 @@ +import t9578 + +proc testOpenArray*(x: var openArray[mytype]) = + f(x[0].addr) diff --git a/tests/ccgbugs/xseq9578.nim b/tests/ccgbugs/xseq9578.nim new file mode 100644 index 000000000..782efe04f --- /dev/null +++ b/tests/ccgbugs/xseq9578.nim @@ -0,0 +1,7 @@ +import t9578 + +proc testSeq*(x: var seq[mytype]) = + f(x[0].addr) + +proc testSeq2*(x: var ptr seq[mytype]) = + f(x[0].addr) diff --git a/tests/ccgbugs/xtuple9578.nim b/tests/ccgbugs/xtuple9578.nim new file mode 100644 index 000000000..b6320fc24 --- /dev/null +++ b/tests/ccgbugs/xtuple9578.nim @@ -0,0 +1,7 @@ +import t9578 + +proc testTuple*(x: var tuple[a:mytype,b:mytype,c:mytype]) = + f(x[0].addr) + +proc testTuple2*(x: var ptr tuple[a:mytype,b:mytype,c:mytype]) = + f(x[0].addr) diff --git a/tests/ccgbugs/xua9578.nim b/tests/ccgbugs/xua9578.nim new file mode 100644 index 000000000..9ba6f8fbc --- /dev/null +++ b/tests/ccgbugs/xua9578.nim @@ -0,0 +1,7 @@ +import t9578 + +proc testUncheckedArray*(x: var UncheckedArray[mytype]) = + f(x[0].addr) + +proc testUncheckedArray2*(x: var ptr UncheckedArray[mytype]) = + f(x[0].addr) |