http://bugzilla.gdcproject.org/show_bug.cgi?id=49
--- Comment #6 from Iain Buclaw <ibuc...@gdcproject.org> 2013-04-09 13:41:15 UTC --- (In reply to comment #5) > (In reply to comment #2) > > (In reply to comment #0) > > > test.d: > > > > > > template Tuple(Stuff ...) { > > > alias Stuff Tuple; > > > } > > > struct S { > > > int i; > > > alias Tuple!i t; > > > void a() { > > > auto x = t; > > > } > > > void b() { > > > auto x = t; > > > } > > > } > > > > > > Tracked down to the following: > > > > void a() { > > // OK: 'this' has decl context of 'a' > > (int) x = tuple(this.i); > > } > > > > void b() { > > // WRONG: 'this' has decl context of 'a' > > (int) x = tuple(this.i); > > } > > > Looks like TupleExp's are cached and re-used. This is why when the > TupleExp::semantic ran in b() has a parent of 'a' Fix - Not sure if there are any other cases where this could happen. --- a/gcc/d/dfrontend/expression.c +++ b/gcc/d/dfrontend/expression.c @@ -5200,7 +5200,7 @@ TupleExp::TupleExp(Loc loc, TupleDeclaration *tup) if (o->dyncast() == DYNCAST_EXPRESSION) { Expression *e = (Expression *)o; - if (e->op == TOKdsymbol) + if (e->op == TOKdsymbol || e->op == TOKdotvar) e = e->syntaxCopy(); exps->push(e); } -- Configure bugmail: http://bugzilla.gdcproject.org/userprefs.cgi?tab=email ------- You are receiving this mail because: ------- You are watching all bug changes.