CTFE Status
Stefan Koch via Digitalmars-d
digitalmars-d at puremagic.com
Sat Dec 3 16:14:26 PST 2016
On Saturday, 3 December 2016 at 23:30:58 UTC, Stefan Koch wrote:
> Another bug in continue break handling has appeared.
>
> uint fn() {
> for (;;)
> {
> if (true) break;
> return 0;
> }
> return 1;
> }
>
> static assert(fn());
>
> The above code is enough to trigger it.
> Apparently the fixup jump for the break is never inserted.
> I doubt that this is an off-by-one error again.
>
> It's going to be tricky.
I figured out part of the reason for this bug.
baically it's like this.
> uint fn() {
> for (;;)
beginBlock:
//causes and unconditonal jump (UC1) after the end of the block
> {
> if (true) break;
// causes an unconditional jump(UC2) here to the end of the block
UC2: goto endBlock;
> return 0;
endBlock:
UC1: goto BeginBlock;
> }
> return 1;
> }
More information about the Digitalmars-d
mailing list