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