On 26.02.2011 01:56, bearophile wrote:
Is this program showing a bug in multiple assignments (DMD 2.052)?


void main() {
     int i;
     int[2] x;
     i, x[i] = 1;
     assert(x == [1, 0]); // OK

     int j;
     int[2] y;
     y[j], j = 1;
     assert(y == [0, 0]); // Not OK
}


At the end of the program I expect y to be [1,0] instead of [0,0].

Yet this C program with GCC:

#include "stdio.h"
int main() {
     int i = 0;
     int x[2] = {0, 0};
     i, x[i] = 1;
     printf("%d %d\n", x[0], x[1]);

     int j = 0;
     int y[2] = {0, 0};
     y[j], j = 1;
     printf("%d %d\n", y[0], y[1]);

     return 0;
}


has the same output as DMD:
1 0
0 0

Bye,
bearophile

I couldn't find any info on the comma expression in the language reference, but this was my first google hit:
"""
A comma expression contains two operands of any type separated by a comma and has *left-to-right* associativity. The left operand is fully evaluated, possibly producing side effects, and its value, if there is one, is *discarded*. The right operand is then evaluated. The type and value of the result of a comma expression are those of its right operand, after the usual unary conversions
"""

Reply via email to