[Issue 2998] ICE(expression.c) with floating point enum

2015-06-08 Thread via Digitalmars-d-bugs
https://issues.dlang.org/show_bug.cgi?id=2998

Andrei Alexandrescu and...@erdani.com changed:

   What|Removed |Added

Version|2.030   |D2

--


[Issue 2998] ICE(expression.c) with floating point enum

2009-10-06 Thread d-bugmail
http://d.puremagic.com/issues/show_bug.cgi?id=2998


Walter Bright bugzi...@digitalmars.com changed:

   What|Removed |Added

 Status|NEW |RESOLVED
 Resolution||FIXED


--- Comment #5 from Walter Bright bugzi...@digitalmars.com 2009-10-06 
02:20:50 PDT ---
Fixed dmd 2.033

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


[Issue 2998] ICE(expression.c) with floating point enum

2009-10-01 Thread d-bugmail
http://d.puremagic.com/issues/show_bug.cgi?id=2998


Walter Bright bugzi...@digitalmars.com changed:

   What|Removed |Added

 CC||bugzi...@digitalmars.com


--- Comment #4 from Walter Bright bugzi...@digitalmars.com 2009-10-01 
10:42:10 PDT ---
The order in which those two functions are called shouldn't matter. The actual
problem is the TypeEnum doesn't have proper overrides for isreal, isimaginary,
etc. Will fix.

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


[Issue 2998] ICE(expression.c) with floating point enum

2009-09-02 Thread d-bugmail
http://d.puremagic.com/issues/show_bug.cgi?id=2998


Don clugd...@yahoo.com.au changed:

   What|Removed |Added

   Keywords||patch
 CC||clugd...@yahoo.com.au




--- Comment #1 from Don clugd...@yahoo.com.au  2009-09-02 00:32:14 PDT ---

PATCH: enum.c, in EnumDeclaration::semantic(), around line 195.
The interpret optimisation should be done BEFORE the cast. Just swap the order.
Otherwise, constfold functions such as Add() think it's an enum type, not a
real, and so they default to integer, and chaos ensues.

// Now set e to (elast + 1)
e = new AddExp(em-loc, elast, new IntegerExp(em-loc, 1,
Type::tint32));
e = e-semantic(sce);
+e = e-optimize(WANTvalue | WANTinterpret);
e = e-castTo(sce, elast-type);
-e = e-optimize(WANTvalue | WANTinterpret);



However, there are other problems in this function. If you try to use a struct
inside an enum, you get garbage error messages without line number; you find
that you need to define a .max() property for the struct,  and error messages
are repeated. I attach a revised enum.c which fixes these problems, and allows
the code below to work correctly:

enum G : real { a, b }
enum E : real { a=18.0, b }
enum F : real { c=E.b, d }

struct S{
   int x;
   S opAdd(int q) { return S(x+1);} 
   int opCmp(S s) { return x  s.x; }
}
enum H : S { a=S(0), b}

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