Thread overview | |||||||
---|---|---|---|---|---|---|---|
|
October 29, 2010 [Issue 5131] New: [ICE] opAssign and associative arrays (AA) are broken for types != this | ||||
---|---|---|---|---|
| ||||
http://d.puremagic.com/issues/show_bug.cgi?id=5131 Summary: [ICE] opAssign and associative arrays (AA) are broken for types != this Product: D Version: D2 Platform: Other OS/Version: Windows Status: NEW Keywords: ice-on-valid-code Severity: normal Priority: P2 Component: DMD AssignedTo: nobody@puremagic.com ReportedBy: sandford@jhu.edu --- Comment #0 from Rob Jacques <sandford@jhu.edu> 2010-10-29 11:42:39 PDT --- Using DMD 2.050, when trying to assign a value to an associative array that is not the type of the AA results in an ICE. Here are two test cases: import std.variant; void main() { Variant[string] a; a["ICE?"] = 1; } ------------------------ struct ICE { ICE opAssign(int x) { return this; } }; void main() { ICE[string] a; a["ICE?"] = 1; } Note that: void main() { Variant[string] a; a["ICE?"] = Variant(1); } compiles correctly. See http://d.puremagic.com/issues/show_bug.cgi?id=2451 -- Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email ------- You are receiving this mail because: ------- |
October 31, 2010 [Issue 5131] Segfault(expression.c) opAssign and associative arrays (AA) are broken for types != this | ||||
---|---|---|---|---|
| ||||
Posted in reply to Rob Jacques | http://d.puremagic.com/issues/show_bug.cgi?id=5131 Don <clugdbug@yahoo.com.au> changed: What |Removed |Added ---------------------------------------------------------------------------- Keywords| |patch --- Comment #1 from Don <clugdbug@yahoo.com.au> 2010-10-31 00:58:35 PDT --- With val[key] = e2, the temporary variable needs to be of typeof(val), not typeof(e2). PATCH: expression.c, AssignExp::semantic(), line 8974. Expression *e = op_overload(sc); if (e && e1->op == TOKindex && ((IndexExp *)e1)->e1->type->toBasetype()->ty == Taarray) { // Deal with AAs (Bugzilla 2451) // Rewrite as: - // e1 = (typeof(e2) tmp = void, tmp = e2, tmp); + // e1 = (typeof(aa.value) tmp = void, tmp = e2, tmp); + Type * aaValueType = ((TypeAArray *)((IndexExp *)e1)->e1->type->toBasetype())->next; Identifier *id = Lexer::uniqueId("__aatmp"); - VarDeclaration *v = new VarDeclaration(loc, e2->type, id, new VoidInitializer(NULL)); + VarDeclaration *v = new VarDeclaration(loc, aaValueType, id, new VoidInitializer(NULL)); v->storage_class |= STCctfe; Expression *de = new DeclarationExp(loc, v); VarExp *ve = new VarExp(loc, v); -- Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email ------- You are receiving this mail because: ------- |
November 08, 2010 [Issue 5131] Segfault(expression.c) opAssign and associative arrays (AA) are broken for types != this | ||||
---|---|---|---|---|
| ||||
Posted in reply to Rob Jacques | http://d.puremagic.com/issues/show_bug.cgi?id=5131 Walter Bright <bugzilla@digitalmars.com> changed: What |Removed |Added ---------------------------------------------------------------------------- Status|NEW |RESOLVED CC| |bugzilla@digitalmars.com Resolution| |FIXED --- Comment #2 from Walter Bright <bugzilla@digitalmars.com> 2010-11-07 17:46:04 PST --- http://www.dsource.org/projects/dmd/changeset/743 -- Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email ------- You are receiving this mail because: ------- |
Copyright © 1999-2021 by the D Language Foundation