Re: Unwanted freeing of generic types
Zoltan Varga <[email protected]> Thu, 17 Aug 2017 20:25:26 -0400
| Newsgroups | gmane.comp.gnome.mono.devel |
|---|---|
| Message-ID | <CAJR-0p8GJ_L8RaQdOVDtKogsqCzBNwFmVidcmqf7Mf7cwJxOSQ@mail.gmail.com> |
Hi,
Nine catch, could you submit a PR with the fix ?
Zoltan
On Thu, Aug 17, 2017 at 4:54 PM, Neale Ferguson <[email protected]>
wrote:
> 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
>
>
_______________________________________________
Mono-devel-list mailing list
[email protected]
http://lists.dot.net/mailman/listinfo/mono-devel-list