Re: Unwanted freeing of generic types
Neale Ferguson <[email protected]> Thu, 17 Aug 2017 20:54:37 +0000
| Newsgroups | gmane.comp.gnome.mono.devel |
|---|---|
| Message-ID | <[email protected]> |
In threads.c we defined SpecialStaticOffset:
typedef union {
struct {
#if G_BYTE_ORDER != G_LITTLE_ENDIAN
guint32 type : 1;
guint32 offset : 25;
guint32 index : 6;
#else
guint32 index : 6;
guint32 offset : 25;
guint32 type : 1;
#endif
} fields;
guint32 raw;
} SpecialStaticOffset;
However, the MAKE_SPECIAL_STATIC_OFFSET macro assumes little endian:
#define MAKE_SPECIAL_STATIC_OFFSET(index, offset, type) \
((SpecialStaticOffset) { .fields = { (type), (offset), (index) } }.raw)
Therefore the offset value that was being returned was incorrect and we'd choose the wrong bitset. To fix this:
#if G_BYTE_ORDER != G_LITTLE_ENDIAN
#define MAKE_SPECIAL_STATIC_OFFSET(index, offset, type) \
((SpecialStaticOffset) { .fields = { (type), (offset), (index) } }.raw)
#else
#define MAKE_SPECIAL_STATIC_OFFSET(index, offset, type) \
((SpecialStaticOffset) { .fields = { (index), (offset), (type) } }.raw)
#endif
Making this change results in the failing (crashing) test - generics-special2.2 - to work as it should.
Neale
_______________________________________________
Mono-devel-list mailing list
[email protected]
http://lists.dot.net/mailman/listinfo/mono-devel-list