summary refs log tree commit diff stats
diff options
context:
space:
mode:
-rw-r--r--compiler/ccgexprs.nim1
-rw-r--r--tests/ccgbugs/t9578.nim76
-rw-r--r--tests/ccgbugs/xarray9578.nim7
-rw-r--r--tests/ccgbugs/xoa9578.nim4
-rw-r--r--tests/ccgbugs/xseq9578.nim7
-rw-r--r--tests/ccgbugs/xtuple9578.nim7
-rw-r--r--tests/ccgbugs/xua9578.nim7
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)