Strange error in DGC for Arm (2.0.59 with gcc 4.7.2)
Johannes Pfau
nospam at example.com
Sat Aug 24 06:09:06 PDT 2013
Am Fri, 23 Aug 2013 09:46:13 +0200
schrieb Johannes Pfau <nospam at example.com>:
> Am Wed, 07 Aug 2013 00:05:35 +0200
> schrieb "Timofei Bolshakov" <tbolsh at gmail.com>:
>
> > Hello!
> >
> > I got strange problem.
> > When I am trying to send a message containing a struct of size 30
> > I am getting a strange exception:
> >
> > core.exception.AssertError@/home/tbolshakov/x-tools/arm-unknown-linux-gnueabi-gdc/lib/gcc/arm-unknown-linux-gnueabi/4.7.2/include/d/std/variant.d(280):
> > target must be non-null
> >
> > The code looks like:
> > // enum ove the byte string string
> > uint ushort struct
> > send( tid, MessageTag.SPTRecord, gwmac_str,
> > mac2HexString(t[0].idup), utc, ms, aStruct );
> >
> > Does anybody have an idea why? Does anybody have an idea hw to
> > fix it?
> >
> > I have DGC version 2.0.59 made with gcc 4.7.2 (crosstool-ng
> > 1.18.0).
>
> There are bugs in std.variant on ARM.
>
> But in this case it might have a different cause: std.concurrency
> stores data in a Variant (see std.variant). A variant can only store
> things with a maximum size of creal.sizeof. On x86 creal is a pair of
> 2 reals, so 12/16bytes + alignment = 32 bytes.
>
> On ARM real == double = 8 bytes, so creal.sizeof is 16 bytes. So the
> max size of a struct which can be stored in a Variant is 16 on ARM.
> This is basically a problem in Variant's design, it's not really meant
> to support struct types. It's for basic types only. This is why
> VariantN exists where you can define your own max size. But you can't
> access that functionality through std.concurrency.
>
> I'd say file a bug report on std.concurrency that big structs are not
> supported and mention the issue that on non-x86 the max size is 16
> byte only.
http://d.puremagic.com/issues/show_bug.cgi?id=10740
More information about the D.gnu
mailing list