digitalmars.D.bugs - [Issue 7940] New: CTFE breaks
- d-bugmail puremagic.com (49/49) Apr 18 2012 http://d.puremagic.com/issues/show_bug.cgi?id=7940
- d-bugmail puremagic.com (76/76) Apr 21 2012 http://d.puremagic.com/issues/show_bug.cgi?id=7940
- d-bugmail puremagic.com (36/36) Jun 26 2012 http://d.puremagic.com/issues/show_bug.cgi?id=7940
- d-bugmail puremagic.com (24/24) Nov 06 2012 http://d.puremagic.com/issues/show_bug.cgi?id=7940
- d-bugmail puremagic.com (10/10) Nov 07 2012 http://d.puremagic.com/issues/show_bug.cgi?id=7940
- d-bugmail puremagic.com (8/8) Nov 07 2012 http://d.puremagic.com/issues/show_bug.cgi?id=7940
- d-bugmail puremagic.com (9/9) Nov 07 2012 http://d.puremagic.com/issues/show_bug.cgi?id=7940
http://d.puremagic.com/issues/show_bug.cgi?id=7940 Summary: CTFE breaks Product: D Version: D2 Platform: x86_64 OS/Version: Linux Status: NEW Severity: critical Priority: P2 Component: DMD AssignedTo: nobody puremagic.com ReportedBy: iteronvexor gmail.com DMD 2.059 64-bit Gnu/Linux ----------------8<----------------8<---------------- import std.typecons : Tuple; import std.array : appender; import std.algorithm : sort; import std.stdio : writeln; alias double Real; struct S { Tuple!(uint, Real)[] _data; alias _data this; } private auto gen(K, V)(V[K] data) { alias Tuple!(K, V) T; auto app = appender!(T[]); foreach(k, v; data) app.put(T(k, v)); sort(app.data); return app.data; } auto s(Real[uint] data) { return S(gen!(uint, Real)(data)); } static S s1 = s([1: 12.0, 5: 4.6, 3: 9.99]); void main() { S s2 = s([1: 12.0, 5: 4.6, 3: 9.99]); // prints [Tuple!(uint,double)(0, nan), Tuple!(uint,double)(0, nan), Tuple!(uint,double)(0, nan)] writeln(s1); // prints [Tuple!(uint,double)(1, 12), Tuple!(uint,double)(3, 9.99), Tuple!(uint,double)(5, 4.6)] writeln(s2); } ---------------->8---------------->8---------------- -- Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email ------- You are receiving this mail because: -------
Apr 18 2012
http://d.puremagic.com/issues/show_bug.cgi?id=7940 SomeDude <lovelydear mailmetrash.com> changed: What |Removed |Added ---------------------------------------------------------------------------- CC| |lovelydear mailmetrash.com Platform|x86_64 |All OS/Version|Linux |All PDT --- Same code as above, very slightly simplified. ----------------- import std.typecons : Tuple; import std.array : appender; import std.stdio : writeln; struct S { Tuple!(uint, double)[] _data; alias _data this; } private auto gen(K, V)(V[K] data) { alias Tuple!(K, V) T; auto app = appender!(T[]); foreach(k, v; data) app.put(T(k, v)); return app.data; } auto s(double[uint] data) { return S(gen!(uint, double)(data)); } void main() { static S s1 = s([1: 12.0, 5: 4.6, 3: 9.99]); S s2 = s([1: 12.0, 5: 4.6, 3: 9.99]); writeln(s1); writeln(s2); } ------------------ PS E:\DigitalMars\dmd2\samples> rdmd -g bug.d [Tuple!(uint,double)(0, nan), Tuple!(uint,double)(0, nan), Tuple!(uint,double)(0, nan)] [Tuple!(uint,double)(1, 12), Tuple!(uint,double)(3, 9.99), Tuple!(uint,double)(5, 4.6)] If we remove the static, it works. If we replace the appender by an array in: import std.typecons : Tuple; import std.array : appender; import std.stdio : writeln; struct S { Tuple!(uint, double)[] _data; alias _data this; } private auto gen(K, V)(V[K] data) { alias Tuple!(K, V) T; T[] app; foreach(k, v; data) app ~= T(k, v); return app; } auto s(double[uint] data) { return S(gen!(uint, double)(data)); } void main() { static S s1 = s([1: 12.0, 5: 4.6, 3: 9.99]); S s2 = s([1: 12.0, 5: 4.6, 3: 9.99]); writeln(s1); writeln(s2); } PS E:\DigitalMars\dmd2\samples> rdmd -g bug.d [Tuple!(uint,double)(1, 12), Tuple!(uint,double)(5, 4.6), Tuple!(uint,double)(3, 9.99)] [Tuple!(uint,double)(1, 12), Tuple!(uint,double)(3, 9.99), Tuple!(uint,double)(5, 4.6)] If we remove the static: PS E:\DigitalMars\dmd2\samples> rdmd -g bug.d [Tuple!(uint,double)(1, 12), Tuple!(uint,double)(3, 9.99), Tuple!(uint,double)(5, 4.6)] [Tuple!(uint,double)(1, 12), Tuple!(uint,double)(3, 9.99), Tuple!(uint,double)(5, 4.6)] -- Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email ------- You are receiving this mail because: -------
Apr 21 2012
http://d.puremagic.com/issues/show_bug.cgi?id=7940 Don <clugdbug yahoo.com.au> changed: What |Removed |Added ---------------------------------------------------------------------------- Keywords| |CTFE, wrong-code CC| |clugdbug yahoo.com.au Summary|CTFE breaks |CTFE wrong-code for | |opAssign and | |std.array.Appender Could be a CTFE compiler bug, but more likely to be a bug in the if (__ctfe) code in std.array.Appender. I don't trust array.Appender anyway. I see no reason for it not be safe. It shouldn't be using pointers at all. Reduced test case: ----------------- import std.array : appender; struct Bug7940 { int field0; void opAssign(Bug7940 rhs) { field0 = rhs.field0; } } Bug7940[] gen() { alias Bug7940 T; auto app = appender!(T[]); app.put(T(12)); assert(app.data[0].field0 == 12); return app.data; } void main() { static const ww = gen(); } -- Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email ------- You are receiving this mail because: -------
Jun 26 2012
http://d.puremagic.com/issues/show_bug.cgi?id=7940 Reduced test case shows it's a subtle CTFE bug, involving assignment to a member of a struct which is an element of a slice inside a struct. ---------- struct Bug7940 { int m; } struct App7940 { Bug7940[] x; } int bug7940() { Bug7940[2] y; App7940 app; app.x = y[0..1]; app.x[0].m = 12; assert(y[0].m == 12); assert(app.x[0].m == 12); // also fails return 1; } static assert(bug7940()); -- Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email ------- You are receiving this mail because: -------
Nov 06 2012
http://d.puremagic.com/issues/show_bug.cgi?id=7940 Commit pushed to master at https://github.com/D-Programming-Language/dmd https://github.com/D-Programming-Language/dmd/commit/7aa03a9c79e996884dbe0febd88c2f51bf928084 Fix issue 7940 CTFE wrong-code for opAssign and std.array.Appender There was an erroneous copy. Array literals don't need to be copied (they are reference types). -- Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email ------- You are receiving this mail because: -------
Nov 07 2012
http://d.puremagic.com/issues/show_bug.cgi?id=7940 Commit pushed to dmd-1.x at https://github.com/D-Programming-Language/dmd https://github.com/D-Programming-Language/dmd/commit/bf3a4c05952e31c9a00687280c413d033b08784f fix issue 7940 - CTFE wrong-code for opAssign and std.array.Appender -- Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email ------- You are receiving this mail because: -------
Nov 07 2012
http://d.puremagic.com/issues/show_bug.cgi?id=7940 Walter Bright <bugzilla digitalmars.com> changed: What |Removed |Added ---------------------------------------------------------------------------- Status|NEW |RESOLVED Resolution| |FIXED -- Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email ------- You are receiving this mail because: -------
Nov 07 2012