digitalmars.D.bugs - [Issue 10431] New: ICE(DMD 2.063) in struct.c:741
- d-bugmail puremagic.com (194/194) Jun 20 2013 http://d.puremagic.com/issues/show_bug.cgi?id=10431
- d-bugmail puremagic.com (10/10) Jun 21 2013 http://d.puremagic.com/issues/show_bug.cgi?id=10431
- d-bugmail puremagic.com (19/19) Jun 30 2013 http://d.puremagic.com/issues/show_bug.cgi?id=10431
- d-bugmail puremagic.com (10/10) Aug 06 2013 http://d.puremagic.com/issues/show_bug.cgi?id=10431
- d-bugmail puremagic.com (11/11) Aug 11 2013 http://d.puremagic.com/issues/show_bug.cgi?id=10431
- d-bugmail puremagic.com (9/9) Aug 12 2013 http://d.puremagic.com/issues/show_bug.cgi?id=10431
http://d.puremagic.com/issues/show_bug.cgi?id=10431 Summary: ICE(DMD 2.063) in struct.c:741 Product: D Version: D2 Platform: All OS/Version: All Status: NEW Severity: normal Priority: P2 Component: DMD AssignedTo: nobody puremagic.com ReportedBy: timon.gehr gmx.ch DMD 2.063: Compiling the code below: dmd: struct.c:741: virtual void StructDeclaration::semantic(Scope*): Assertion `type->ty != Tstruct || ((TypeStruct *)type)->sym == this' failed. The following code should compile and run: import std.conv, std.algorithm, std.range; import std.uni, std.typecons, std.string, std.array; mixin ADT!q{ ListI: NilI | Cons int ListI }; mixin ADT!q{ Pair(T,S): PP T S }; mixin ADT!q{ List(T): | Nil | Cons T List!T }; mixin ADT!q{ Tree(T): Leaf | Node Tree!T Leaf!T Tree!T }; mixin ADT!q{ DayOfWeek: | Monday | Tuesday | Wednesday | Thursday | Friday | Saturday | Sunday }; auto list(R)(R r){ if(r.empty) return Nil!(ElementType!R); auto f = r.front; r.popFront(); return Cons(f,list(r)); } size_t length(T)(List!T l){ return l.match!( ()=>0, (x,xs)=>1+length(xs) ); } void main(){ import std.stdio; writeln(PP(1,2)); pragma(msg, typeof(PP(1,2))); auto l=[1,2,3,4,5].list; l.match!(()=>writeln(0),(x,xs)=>writeln(xs)); writeln(l," ",l.length); writeln(Monday); writeln(Tuesday); writeln(Leaf!int); writeln(Cons(1,Nil!int)); } template Seq(T...){ alias T Seq; } void white(ref string s){ while(!s.empty && isWhite(s.front)) s.popFront(); } string ident(ref string s){ string r; s.white(); while(isAlpha(s.front)){ r~=s.front; s.popFront(); } return r; } string nonwhite(ref string s){ string r; s.white(); while(!isWhite(s.front)){ r~=s.front; s.popFront(); } return r; } void expect(ref string s, dchar c){ s.white(); if(s.front != c) throw new Exception(""); s.popFront(); } struct Sum{ string name; string[] types; } Sum sum(ref string s){ Sum r; r.name = s.ident(); s.white(); while(!s.empty && s.front != '|'){ r.types~=s.nonwhite(); s.white(); } return r; } string create(string s){ auto name = s.ident; string params; bool hasparams = false; if(s.front=='('){ hasparams = true; s.expect('('); while(s.front!=')'){ params~=s.front; s.popFront(); } s.expect(')'); } s.expect(':'); string r; r~="struct "~name; if(hasparams) r~="("~params~")"; r~="{"; Sum[] sums; s.white(); if(s.front!='|') sums~=s.sum(); while(!s.empty && s.front=='|'){ s.popFront(); sums~=s.sum(); } if(sums.length>1) r~="\n\tprivate{\n\t\tsize_t tag;\n\t\tunion{"; else r~="\n\t"; // TODO: only add indirections if necessary? r~="Seq!("; foreach(sum;sums){ r~="Tuple!("; foreach(tt;sum.types) r~=tt~","; r~=")*,"; } r~=") data;"; if(sums.length>1) r~=" }\n\t}\n"; else r~="\n"; r~="\tprivate static make(size_t x,T...)(T args){\n"; r~="\t\t"~name~" v;\n"; if(sums.length>1) r~="\t\tv.tag=x;\n"; r~="\t\tv.data[x]=[tuple(args)].ptr;\n"; r~="\t\treturn v;\n"; r~="\t}\n"; r~="\tstring toString(){\n"; r~="\t\tstring display(T)(T args){\n"; r~="\t\t\tstring r;\n"; r~="\t\t\tforeach(i,a;args.expand) r~=to!string(args[i])~(i+1==args.length?\"\":\",\");\n"; r~="\t\t\treturn r;\n"; r~="\t\t}\n"; auto genret(size_t i=0){ return "return \""~sums[i].name~(sums[i].types.length?"(\"~display(*data["~i.to!string~"])~\")":"")~"\";\n"; } if(sums.length>1){ r~="\t\tswitch(tag){\n\t\t\tdefault: assert(0);\n"; foreach(i;0..sums.length){ r~="\t\t\tcase "~i.to!string~": "~genret(i); } r~="\t\t}\n"; }else if(sums.length) r~=genret(); r~="\t}\n"; r~="}\n\n"; foreach(i,sum;sums){ r~="auto "~sum.name; if(hasparams) r~="("~params~")"; r~="("; foreach(j,tt;sum.types) r~=tt~" param"~to!string(j)~","; r~="){ return "~name~(hasparams?"!("~params~")":"")~".make!"~i.to!string~"("~ iota(sum.types.length).map!(a=>"param"~a.to!string).join(",")~"); }\n"; } r~="auto match("; foreach(sum;sums) r~="alias "~sum.name~"case,"; if(hasparams) r~=params; r~=")("~name~(hasparams?"!("~params~")":"")~" arg){\n"; r~="\tswitch(arg.tag){\n\t\t\tdefault: assert(0);\n"; foreach(i,sum;sums){ r~="\t\t\tcase "~to!string(i)~": auto v=*arg.data["~to!string(i)~"]; return "~sum.name~"case("; foreach(j,tt;sum.types) r~="v["~to!string(j)~"],"; r~=");\n"; } r~="\t}\n}\n"; return r; } template ADT(string s){ mixin(create(s)); } -- Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email ------- You are receiving this mail because: -------
Jun 20 2013
http://d.puremagic.com/issues/show_bug.cgi?id=10431 bearophile_hugs eml.cc changed: What |Removed |Added ---------------------------------------------------------------------------- CC| |bearophile_hugs eml.cc Are you able to reduce the code a lot? -- Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email ------- You are receiving this mail because: -------
Jun 21 2013
http://d.puremagic.com/issues/show_bug.cgi?id=10431 Tim <tim.dlang t-online.de> changed: What |Removed |Added ---------------------------------------------------------------------------- CC| |tim.dlang t-online.de The following code results in the same assertion failure: struct X(alias Y) { } struct A { int[] data; } alias X!(A([])) X1; alias X!(A([])) X2; -- Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email ------- You are receiving this mail because: -------
Jun 30 2013
http://d.puremagic.com/issues/show_bug.cgi?id=10431 Kenji Hara <k.hara.pg gmail.com> changed: What |Removed |Added ---------------------------------------------------------------------------- Keywords| |ice, pull https://github.com/D-Programming-Language/dmd/pull/2452 -- Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email ------- You are receiving this mail because: -------
Aug 06 2013
http://d.puremagic.com/issues/show_bug.cgi?id=10431 Commits pushed to master at https://github.com/D-Programming-Language/dmd https://github.com/D-Programming-Language/dmd/commit/c5d912b75c1636589d6d6a022f1f1c2950202e31 fix Issue 10431 - ICE(DMD 2.063) in struct.c:741 (1) https://github.com/D-Programming-Language/dmd/commit/e615dbf68f91d54eaa632402744491cbd5b9b577 Issue 10431 - ICE(DMD 2.063) in struct.c:741 (1) -- Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email ------- You are receiving this mail because: -------
Aug 11 2013
http://d.puremagic.com/issues/show_bug.cgi?id=10431 Kenji Hara <k.hara.pg gmail.com> changed: What |Removed |Added ---------------------------------------------------------------------------- Status|NEW |RESOLVED Resolution| |FIXED -- Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email ------- You are receiving this mail because: -------
Aug 12 2013