Warn about do nothing expressions?

Frustrated Who at where.com
Fri Mar 28 11:04:40 PDT 2014


On Friday, 28 March 2014 at 16:54:49 UTC, Benjamin Thaut wrote:
> I had a bug which came down to the following line today:
>
> m_takeIndex = m_takeIndex++;
>
> Actually this line does nothing. m_takeIndex remains at exactly 
> the same value as before (tested with dmd 2.065).
>
> Can someone please explain why? And would be suitable to warn 
> about this, if it is correct behaviour?
>
> Kind Regards
> Benjamin Thaut

This should be invalid.

m_takeIndex++;

actually increments the variable.

m_takeIndex = m_takeIndex++; should do exactly the same.

It is a bug. It might be correct in monarch's world but it is not 
logical. I think monarch is just trying to justify the way D does 
it, regardless if D is D is wrong or not.

I imagine what is going on is that D is creating a temp variable, 
assigning it to the local variable, then incrementing the temp 
variable(since++ increments "after" the assignment).

That, or D really is treating that as a nop, which is wrong too.

Test case shows it is probably the first:

	int j = 0, i = 0;
	i = j++;
	// i = 0, j = 1

hence D is wrong, Monarch is wrong, etc...

m_takeIndex = m_takeIndex++;

should, given the example above, evaluate to

m_takeIndex = m_takeIndex; (a nop)
m_takeIndex++; (variable incremented)


hence, D is not consistent with itself, which at the very least 
is a bug.








More information about the Digitalmars-d mailing list