summary refs log tree commit diff stats
diff options
context:
space:
mode:
-rw-r--r--compiler/ccgtrav.nim6
-rwxr-xr-xcompiler/types.nim4
-rwxr-xr-xtests/reject/t99bott.nim2
-rw-r--r--tests/reject/tenumitems.nim2
4 files changed, 10 insertions, 4 deletions
diff --git a/compiler/ccgtrav.nim b/compiler/ccgtrav.nim
index 995ed2973..83dda692b 100644
--- a/compiler/ccgtrav.nim
+++ b/compiler/ccgtrav.nim
@@ -110,7 +110,11 @@ proc genTraverseProc(m: BModule, typ: PType, reason: TTypeInfoReason): PRope =
   if typ.kind == tySequence:
     genTraverseProcSeq(c, "a".toRope, typ)
   else:
-    genTraverseProc(c, "(*a)".toRope, typ.sons[0])
+    if skipTypes(typ.sons[0], abstractInst).kind in {tyArrayConstr, tyArray}:
+      # C's arrays are broken beyond repair:
+      genTraverseProc(c, "a".toRope, typ.sons[0])
+    else:
+      genTraverseProc(c, "(*a)".toRope, typ.sons[0])
   
   let generatedProc = ropef("$1 {$n$2$3$4}$n",
         [header, p.s[cpsLocals], p.s[cpsInit], p.s[cpsStmts]])
diff --git a/compiler/types.nim b/compiler/types.nim
index 5f7496fc0..efdc30dbf 100755
--- a/compiler/types.nim
+++ b/compiler/types.nim
@@ -866,9 +866,11 @@ proc typeAllowedAux(marker: var TIntSet, typ: PType, kind: TSymKind): bool =
   of tyArray:
     result = t.sons[1].kind == tyEmpty or
         typeAllowedAux(marker, t.sons[1], skVar)
-  of tyPtr, tyRef:
+  of tyRef:
     if kind == skConst: return false
     result = typeAllowedAux(marker, t.sons[0], skVar)
+  of tyPtr:
+    result = typeAllowedAux(marker, t.sons[0], skVar)
   of tyArrayConstr, tyTuple, tySet, tyConst, tyMutable, tyIter, tyProxy: 
     for i in countup(0, sonsLen(t) - 1): 
       result = typeAllowedAux(marker, t.sons[i], kind)
diff --git a/tests/reject/t99bott.nim b/tests/reject/t99bott.nim
index 7d11ba4b0..7ebfd61e9 100755
--- a/tests/reject/t99bott.nim
+++ b/tests/reject/t99bott.nim
@@ -1,7 +1,7 @@
 discard """
   file: "t99bott.nim"
   line: 26
-  errormsg: "cannot evaluate 'GetBottleNumber(bn)'"
+  errormsg: "constant expression expected"
   disabled: false
 """
 ## 99 Bottles of Beer
diff --git a/tests/reject/tenumitems.nim b/tests/reject/tenumitems.nim
index a0497fd59..b6eee5ba8 100644
--- a/tests/reject/tenumitems.nim
+++ b/tests/reject/tenumitems.nim
@@ -1,6 +1,6 @@
 discard """
   line: 7
-  errormsg: "a type has no value"
+  errormsg: "type mismatch"
 """
 
 type a = enum b,c,d