summary refs log tree commit diff stats
path: root/lib/system
diff options
context:
space:
mode:
authorAraq <rumpf_a@web.de>2011-04-03 22:59:00 +0200
committerAraq <rumpf_a@web.de>2011-04-03 22:59:00 +0200
commitb38c7adad1e153c8678c93098391cb2bd8d8fef6 (patch)
tree11c696641e4b7567dc2d7ff54407661ce6403e60 /lib/system
parent623fd8a8abcc0e192cd5e5dd4e1e54b57c39ccf1 (diff)
downloadNim-b38c7adad1e153c8678c93098391cb2bd8d8fef6.tar.gz
bugfix: GC more forgiving
Diffstat (limited to 'lib/system')
-rwxr-xr-xlib/system/gc.nim5
1 files changed, 4 insertions, 1 deletions
diff --git a/lib/system/gc.nim b/lib/system/gc.nim
index 5288316f2..882825f5e 100755
--- a/lib/system/gc.nim
+++ b/lib/system/gc.nim
@@ -265,7 +265,10 @@ proc unsureAsgnRef(dest: ppointer, src: pointer) {.compilerProc.} =
   # reference is in the stack or not (this can happen for var parameters).
   if not IsOnStack(dest):
     if src != nil: incRef(usrToCell(src))
-    if dest^ != nil: decRef(usrToCell(dest^))
+    # XXX finally use assembler for the stack checking instead!
+    # the test for '!= nil' is correct, but I got tired of the segfaults
+    # resulting from the crappy stack checking:
+    if cast[int](dest^) >=% PageSize: decRef(usrToCell(dest^))
   dest^ = src
 
 proc initGC() =