Am Fri, 15 May 2015 09:23:33 +0200
schrieb "Iain Buclaw via D.gnu" <d.gnu@puremagic.com>:

> On 15 May 2015 at 09:13, Iain Buclaw <ibuc...@gdcproject.org> wrote:
> > On 15 May 2015 at 09:08, Johannes Pfau via D.gnu
> > <d.gnu@puremagic.com> wrote:
> >> Am Thu, 14 May 2015 19:02:48 +0200
> >> schrieb Johannes Pfau <nos...@example.com>:
> >>
> >>> ...
> >>
> >> TLDR
> >> As a workaround replace
> >>
> >> globalSum += otherFunc();
> >>
> >> which GDC currently treats as
> >>
> >> globalSum = globalSum + otherFunc();
> >>
> >> with
> >>
> >> globalSum = otherFunc() + globalSum;
> >>
> >
> > That is an interesting workaround, should we perhaps reconsider our
> > code generation here?
> >
> 
> I can confirm that C codegen does infact emit 'foo += bar()'  as  'foo
> = bar() + foo'
> 
> Which only strengthens the reasoning to change it.
> 
> Liran, can you raise a bug report?  Also, can we use your small sample
> (names will be anonymised) to put into the testsuite?
> 
> 
> Regards
> Iain.

BTW: For commutative operations we can simply change the operands. For
non-commutative operations we'll have to explicitly evaluate the side
effects of the RHS before assigning. (-=, ...)

Relevant code is in d-elem.cc: AddAssignExp::toElem etc

Reply via email to