Merge pull request #2910 from cptjazz/compiler_warnings
authormonojenkins <jo.shields+jenkins@xamarin.com>
Mon, 18 Apr 2016 22:00:48 +0000 (23:00 +0100)
committermonojenkins <jo.shields+jenkins@xamarin.com>
Mon, 18 Apr 2016 22:00:48 +0000 (23:00 +0100)
Fix undefined behaviour in left-shift.

This PR fixes a left-shift that relied on undefined behaviour.

Clang emitted the following warning (prior to this patch):
```
sgen-descriptor.c:189:54: warning: shifting a negative signed value is undefined [-Wshift-negative-value]
   return desc | VECTOR_SUBTYPE_REFS | ((gssize)(-1) << 16);
                                        ~~~~~~~~~~~~ ^
```

mono/sgen/sgen-descriptor.c

index 852a4a63329d2fdd134ebfb7c5e762fdd901c000..6ddea6d621301348aa2035c5f227994d8f695631 100644 (file)
@@ -186,7 +186,7 @@ mono_gc_make_descr_for_array (int vector, gsize *elem_bitmap, int numbits, size_
                }
                /* Note: we also handle structs with just ref fields */
                if (num_set * sizeof (gpointer) == elem_size) {
-                       return desc | VECTOR_SUBTYPE_REFS | ((gssize)(-1) << 16);
+                       return desc | VECTOR_SUBTYPE_REFS | ((gsize)(-1) << 16);
                }
                /* FIXME: try run-len first */
                /* Note: we can't skip the object header here, because it's not present */