DMD 0.164: Possible bug in order of evaluation
Klaus Oberhofer
oberhofer at users.sourceforge.net
Fri Aug 18 02:18:10 PDT 2006
While porting some C-Code to D I had a possible bug that has to do with
the order of evaluation of the post increment operator.
The following C sample
<c-code>
#include <memory.h>
#include <stdio.h>
void main()
{
unsigned short testarray_a[17];
unsigned short testarray_b[17];
unsigned short start = 0;
int i;
memset(testarray_a, 0, sizeof(testarray_a));
memset(testarray_b, 0, sizeof(testarray_a));
i = start;
while (i <= 16)
{
testarray_a[i] = 1U << (16 - i);
i++;
}
i = start;
while (i <= 16)
{
testarray_b[i++] = 1U << (16 - i);
}
printf("a:");
for (i = 1; i <= 16; i++)
printf("%i ", testarray_a[i]);
printf("\n");
printf("b:");
for (i = 1; i <= 16; i++)
printf("%i ", testarray_b[i]);
printf("\n");
}
</c-code>
compiled with DMC and VC7 creates the following output:
a:32768 16384 8192 4096 2048 1024 512 256 128 64 32 16 8 4 2 1
b:32768 16384 8192 4096 2048 1024 512 256 128 64 32 16 8 4 2 1
An equivalent D code
<d-code>
module testarray.main;
void main()
{
ushort testarray_a[17];
ushort testarray_b[17];
int i;
ushort start = 0;
i = start;
while (i <= 16)
{
testarray_a[i] = 1U << (16 - i);
i++;
}
i = start;
while (i <= 16)
{
testarray_b[i++] = 1U << (16 - i);
}
printf("a:");
for (i = 1; i <= 16; i++)
printf("%i ", testarray_a[i]);
printf("\n");
printf("b:");
for (i = 1; i <= 16; i++)
printf("%i ", testarray_b[i]);
printf("\n");
}
</d-code>
compiled with DMD 0.164 produces:
a:32768 16384 8192 4096 2048 1024 512 256 128 64 32 16 8 4 2 1
b:16384 8192 4096 2048 1024 512 256 128 64 32 16 8 4 2 1 0
Could someone confirm this as a bug ?
More information about the Digitalmars-d-bugs
mailing list