problem while updating to 2.052

Christian Köstlin christian.koestlin at gmail.com
Sat Feb 19 13:25:56 PST 2011


On 2/19/11 22:06 , bearophile wrote:
> Christian K.:
>
>> hi .. i have a small library for combinatorial parsing.
>> when i updated to version 2.052 of dmd (tested on os x) i got an
>> exception from variant.d:279 (target must be non-null).
>
> It may be a bug. Are you able to create a minimal test program that later will be fit for bugzilla?
>
> Bye,
> bearophile
Hi,

unfortunately not ... I looked several minutes at the stacktrace (would 
it help if I send you the whole project), and could not figure out what 
the problem was. then I tried to change the program (see the diff) and 
it worked.

this is the stacktrace of the exception if it helps:
core.exception.AssertError@/Users/gizmo/.homebrew/Cellar/dmdtwo/2.052/src/phobos/std/variant.d(279): 
target must be non-null
----------------
5   compiler                            0x000340b5 onAssertErrorMsg + 73
6   compiler                            0x0003dfb2 _d_assert_msg + 26
7   compiler                            0x0000ea76 int 
std.variant.VariantN!(32).VariantN.handler!(astelements.MessageInfo).handler(std.variant.VariantN!(32).VariantN.OpID, 
ubyte[32]*, void*).bool tryPutting(astelements.MessageInfo*, TypeInfo, 
void*) + 130
8   compiler                            0x0000e75c int 
std.variant.VariantN!(32).VariantN.handler!(astelements.MessageInfo).handler(std.variant.VariantN!(32).VariantN.OpID, 
ubyte[32]*, void*) + 200
9   compiler                            0x000152a2 
std.variant.VariantN!(32).VariantN 
std.variant.VariantN!(32).VariantN.opAssign!(std.variant.VariantN!(32).VariantN).opAssign(std.variant.VariantN!(32).VariantN) 
+ 78
10  compiler                            0x0001613a void 
std.array.Appender!(std.variant.VariantN!(32).VariantN[]).Appender.put!(std.variant.VariantN!(32).VariantN).put(std.variant.VariantN!(32).VariantN) 
+ 134
11  compiler                            0x000161cb void 
std.array.Appender!(std.variant.VariantN!(32).VariantN[]).Appender.put!(std.variant.VariantN!(32).VariantN[]).put(std.variant.VariantN!(32).VariantN[]) 
+ 115
12  compiler                            0x0000aa8a 
pc.parser.ParseResult!(immutable(char)).ParseResult 
pc.parser.Parser!(immutable(char)).Parser.Repetition.parse(immutable(char)[]) 
+ 422
13  compiler                            0x0000a369 
pc.parser.ParseResult!(immutable(char)).ParseResult 
pc.parser.Parser!(immutable(char)).Parser.parseAll(immutable(char)[]) + 41
14  compiler                            0x000026b6 _Dmain + 446
15  compiler                            0x0003e343 extern (C) int 
rt.dmain2.main(int, char**).void runMain() + 23
16  compiler                            0x0003e2ca extern (C) int 
rt.dmain2.main(int, char**).void tryExec(scope void delegate()) + 38
17  compiler                            0x0003e38b extern (C) int 
rt.dmain2.main(int, char**).void runAll() + 59
18  compiler                            0x0003e2ca extern (C) int 
rt.dmain2.main(int, char**).void tryExec(scope void delegate()) + 38
19  compiler                            0x0003e25b main + 179
20  compiler                            0x000024ed start + 53
21  ???                                 0x00000003 0x0 + 3

regarding types:
my debugoutput at the exception showed me, that the appender already has 
one element of type astelements.PackageInfo and now an array with one 
element of type astelements.MessageInfo is to be put into the appender. 
perhaps this can lead to a problem?
messageinfo is a struct declared like:
struct MessageInfo {
   string name;
   FieldInfo[] fieldInfos;
   EnumDefinition[] enums;
   MessageInfo[] messages;
   string thePackage = "";
  ...
}
, packageinfo is even simpler:

class PackageInfo {
   string fName;
   this(string name) {
     fName = name;
   }
}


thanks in advance

christian


More information about the Digitalmars-d-learn mailing list