[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