[Issue 4067] New: [CTFE] Maybe ignored code in CTFE

d-bugmail at puremagic.com d-bugmail at puremagic.com
Mon Apr 5 05:52:23 PDT 2010


http://d.puremagic.com/issues/show_bug.cgi?id=4067

           Summary: [CTFE] Maybe ignored code in CTFE
           Product: D
           Version: future
          Platform: x86
        OS/Version: Windows
            Status: NEW
          Severity: normal
          Priority: P2
         Component: DMD
        AssignedTo: nobody at puremagic.com
        ReportedBy: bearophile_hugs at eml.cc


--- Comment #0 from bearophile_hugs at eml.cc 2010-04-05 05:52:22 PDT ---
Usually I show here minimal programs that contain the bug, but this time I show
a bigger small program.

This is a small benchmark I've adapted from the old Shootout code, it tests the
performance of exceptions (on dmd they are very slow).

I use this code both at compile time and run time.

It contains a printf and exceptions that can't be used in CTFE, but this
program compiles with dmd v.2.042 and prints 0/0 at ctfe.

import std.c.stdio: printf;

class LoException : Exception {
    this() {
        super(null);
    }
}

class HiException : Exception {
    this() {
        super(null);
    }
}

struct HiLo { int hi, lo; }

struct App {
    int hi, lo, count;

    void someFunction() {
        try {
            hiFunction();
        } catch (Exception e) {
            printf("We shouldn't get here\n");
        }
    }

    void hiFunction() {
        try {
            loFunction();
        } catch (HiException) {
            hi++;
        }
    }

    void loFunction() {
        try {
            blowUp();
        } catch (LoException) {
            lo++;
        }
    }

    void blowUp() {
        if (count & 1)
            throw new HiException();
        else
            throw new LoException();
    }

    auto go(int n) {
        for (count = 0; count < n; count++)
            someFunction();
        return HiLo(hi, lo);
    }
}

void main() {
    enum int n = 1000;
    App app;

    HiLo result1 = app.go(n); // OK
    printf("excepts(%d) hi|lo = %d | %d\n", n, result1.hi, result1.lo);

    enum HiLo result2 = app.go(n); // Err
    printf("excepts(%d) hi|lo = %d | %d\n", n, result2.hi, result2.lo);
}

-- 
Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email
------- You are receiving this mail because: -------


More information about the Digitalmars-d-bugs mailing list