Hi,

attached is a patch that seems to fix the problem with gcc4 and 64bit
architectures.

The scm_mark_locations function in gc-mark.c calls scm_gc_mark on
everything located in one of the allocated segments. Shouldn't there
be a check if the address is at least scm_t_cell aligned? 

Is it correct or is it just plain luck it works with the patch?

Thanks,

-- 
Miroslav Lichvar
--- libguile/gc-mark.c.orig     2006-02-12 14:29:12.000000000 +0100
+++ libguile/gc-mark.c  2006-05-05 14:41:07.000000000 +0200
@@ -433,6 +433,8 @@
   for (m = 0; m < n; ++m)
     {
       SCM obj = * (SCM *) &x[m];
+      if ((scm_t_bits)obj & (sizeof (scm_t_cell) - 1))
+        continue;
       long int segment = scm_i_find_heap_segment_containing_object (obj);
       if (segment >= 0)
        scm_gc_mark (obj);
_______________________________________________
Guile-devel mailing list
Guile-devel@gnu.org
http://lists.gnu.org/mailman/listinfo/guile-devel

Reply via email to