[Issue 5131] Segfault(expression.c) opAssign and associative arrays (AA) are broken for types != this
d-bugmail at puremagic.com
d-bugmail at puremagic.com
Sun Oct 31 00:59:36 PDT 2010
http://d.puremagic.com/issues/show_bug.cgi?id=5131
Don <clugdbug at yahoo.com.au> changed:
What |Removed |Added
----------------------------------------------------------------------------
Keywords| |patch
--- Comment #1 from Don <clugdbug at 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: -------
More information about the Digitalmars-d-bugs
mailing list