CTFE Status

Stefan Koch via Digitalmars-d digitalmars-d at puremagic.com
Mon Nov 21 02:51:01 PST 2016


On Sunday, 20 November 2016 at 16:27:24 UTC, Stefan Koch wrote:
> On Sunday, 20 November 2016 at 15:37:50 UTC, Stefan Koch wrote:
>> Furthermore I need to extend my bc_tests. to make sure the 
>> interpretation is the same.
>> Such that this bug cannot happen again.
>before.
> I have extended my test-suite to test this case.
> It is crucial that the c backend and the interpreter back-ends  
> do always return the same correct value. As those are both 
> testable at CTFE.
>
> I have plans to implement a small CTFEable 
> instruction-set-simulator for the intel 486 processor.
> That way I can make sure that my x86-backend does what it is 
> supposed to do.
> However this is further down the road :)

A bug in Do-While handling appeared that was hidden by the 
previously incorrect behavior.
When writing do { ... } while(true/false)
The IR generated would tell the interpreter to evaluate the 
condition flag.
However the load of a constant does not modify the condition flag 
and therefore if the loop is executed or not, depends on the 
result of a previous comparison.
The fix is simple check for the (false/true) constants.
(DMD has a shortcut for this, awkwardly named isBool() )
with an even more awkward usage.

if (expression.isBool(true)) { // this expression is a constant 
which evaluates to true }
else if (expression.isBool(false)) {// this expression is a 
constant false
else { // this value is not a constant }



More information about the Digitalmars-d mailing list