LDC 0.11.0 has been released!
bearophile
bearophileHUGS at lycos.com
Wed Jul 31 13:53:12 PDT 2013
I think I have found another small bug:
int foo(in bool b) {
if (b == true)
return 1;
assert(0);
}
void main() {}
If I compile it with:
ldmd2 -O -release -noboundscheck -noruntime test.d
It gives:
Error: No implicit runtime calls allowed with -noruntime option
enabled
But if I compile that program with those switches, it should turn
the assert(0) into a HALT instruction, that I think has nothing
to do with runtime calls.
This is the asm of foo(), it contains a call to __d_assert that I
think should not be present:
__D4test3fooFxbZi:
subl $12, %esp
testb $1, %al
je LBB0_2
movl $1, %eax
addl $12, %esp
ret
LBB0_2:
movl $6, 8(%esp)
movl $_.str, 4(%esp)
movl $6, (%esp)
calll __d_assert
This is how dmd compiles the same function with the same
compilation switches, the assert(0) has become a hlt:
_D4test3fooFxbZi:
push EAX
cmp [ESP],1
jne LE
pop ECX
mov EAX,1
ret
LE: hlt
Bye,
bearophile
More information about the digitalmars-d-ldc
mailing list