[sgen] Fix size warnings in the descriptor code.
authorRodrigo Kumpera <kumpera@gmail.com>
Wed, 4 Jun 2014 16:36:00 +0000 (12:36 -0400)
committerRodrigo Kumpera <kumpera@gmail.com>
Wed, 4 Jun 2014 17:34:45 +0000 (13:34 -0400)
mono/metadata/sgen-descriptor.c
mono/metadata/sgen-descriptor.h
mono/metadata/sgen-gc.c

index 1e3bc152e7932f2574fafd13c17fe7b577513c75..c578a91cfb2b1516e3f2076c1b1a4f545498e62e 100644 (file)
@@ -87,7 +87,7 @@ alloc_complex_descriptor (gsize *bitmap, int numbits)
                                return i;
                        }
                }
-               i += complex_descriptors [i];
+               i += (int)complex_descriptors [i];
        }
        if (complex_descriptors_next + nwords > complex_descriptors_size) {
                int new_size = complex_descriptors_size * 2 + nwords;
@@ -266,7 +266,7 @@ mono_gc_get_bitmap_for_descr (void *descr, int *numbits)
 
        case DESC_TYPE_COMPLEX: {
                gsize *bitmap_data = sgen_get_complex_descriptor (d);
-               int bwords = (*bitmap_data) - 1;
+               int bwords = (int)(*bitmap_data) - 1;//Max scalar object size is 1Mb, which means up to 32k descriptor words
                int i;
 
                bitmap = g_new0 (gsize, bwords);
index f07ad4a6ba00b214189b2b51e470daea9ad21ac7..366c7667778a06284f8f27ac2c0692fda29b6347 100644 (file)
@@ -235,7 +235,7 @@ sgen_gc_descr_has_references (mword desc)
                /* there are pointers */        \
                void **_objptr = (void**)(obj); \
                gsize *bitmap_data = sgen_get_complex_descriptor ((desc)); \
-               int bwords = (*bitmap_data) - 1;        \
+               gsize bwords = (*bitmap_data) - 1;      \
                void **start_run = _objptr;     \
                bitmap_data++;  \
                if (0) {        \
@@ -261,8 +261,8 @@ sgen_gc_descr_has_references (mword desc)
 #define OBJ_COMPLEX_ARR_FOREACH_PTR(vt,obj)    do {    \
                /* there are pointers */        \
                gsize *mbitmap_data = sgen_get_complex_descriptor ((vt)->desc); \
-               int mbwords = (*mbitmap_data++) - 1;    \
-               int el_size = mono_array_element_size (vt->klass);      \
+               gsize mbwords = (*mbitmap_data++) - 1;  \
+               gsize el_size = mono_array_element_size (vt->klass);    \
                char *e_start = (char*)(obj) +  G_STRUCT_OFFSET (MonoArray, vector);    \
                char *e_end = e_start + el_size * mono_array_length_fast ((MonoArray*)(obj));   \
                if (0)                                                  \
@@ -270,7 +270,7 @@ sgen_gc_descr_has_references (mword desc)
                while (e_start < e_end) {       \
                        void **_objptr = (void**)e_start;       \
                        gsize *bitmap_data = mbitmap_data;      \
-                       unsigned int bwords = mbwords;  \
+                       gsize bwords = mbwords; \
                        while (bwords-- > 0) {  \
                                gsize _bmap = *bitmap_data++;   \
                                void **start_run = _objptr;     \
index dca117e602df9603261ee3aa9778c8509fd82a18..5274e84d431792f1c76c8978cd196b15cbd93bb2 100644 (file)
@@ -1290,7 +1290,7 @@ precisely_scan_objects_from (void** start_root, void** end_root, char* n_start,
                return;
        case ROOT_DESC_COMPLEX: {
                gsize *bitmap_data = sgen_get_complex_descriptor_bitmap (desc);
-               int bwords = (*bitmap_data) - 1;
+               gsize bwords = (*bitmap_data) - 1;
                void **start_run = start_root;
                bitmap_data++;
                while (bwords-- > 0) {
@@ -1478,7 +1478,7 @@ precisely_report_roots_from (GCRootReport *report, void** start_root, void** end
                return;
        case ROOT_DESC_COMPLEX: {
                gsize *bitmap_data = sgen_get_complex_descriptor_bitmap (desc);
-               int bwords = (*bitmap_data) - 1;
+               gsize bwords = (*bitmap_data) - 1;
                void **start_run = start_root;
                bitmap_data++;
                while (bwords-- > 0) {