digitalmars.D.bugs - [Issue 3147] New: Incorrect value range propagation for addition
- d-bugmail puremagic.com (24/24) Jul 06 2009 http://d.puremagic.com/issues/show_bug.cgi?id=3147
- d-bugmail puremagic.com (37/37) Jul 07 2009 http://d.puremagic.com/issues/show_bug.cgi?id=3147
- d-bugmail puremagic.com (18/18) Nov 16 2010 http://d.puremagic.com/issues/show_bug.cgi?id=3147
- d-bugmail puremagic.com (9/9) Nov 16 2010 http://d.puremagic.com/issues/show_bug.cgi?id=3147
- d-bugmail puremagic.com (10/10) Nov 16 2010 http://d.puremagic.com/issues/show_bug.cgi?id=3147
- d-bugmail puremagic.com (14/14) Nov 16 2010 http://d.puremagic.com/issues/show_bug.cgi?id=3147
- d-bugmail puremagic.com (14/14) Nov 16 2010 http://d.puremagic.com/issues/show_bug.cgi?id=3147
- d-bugmail puremagic.com (12/12) Jun 12 2011 http://d.puremagic.com/issues/show_bug.cgi?id=3147
- d-bugmail puremagic.com (6/6) Jun 12 2011 http://d.puremagic.com/issues/show_bug.cgi?id=3147
- d-bugmail puremagic.com (10/10) Jun 12 2011 http://d.puremagic.com/issues/show_bug.cgi?id=3147
- d-bugmail puremagic.com (10/10) Jun 16 2011 http://d.puremagic.com/issues/show_bug.cgi?id=3147
- d-bugmail puremagic.com (12/12) Jun 16 2011 http://d.puremagic.com/issues/show_bug.cgi?id=3147
- d-bugmail puremagic.com (12/12) Jun 27 2011 http://d.puremagic.com/issues/show_bug.cgi?id=3147
http://d.puremagic.com/issues/show_bug.cgi?id=3147 Summary: Incorrect value range propagation for addition Product: D Version: unspecified Platform: Other OS/Version: Linux Status: NEW Severity: normal Priority: P2 Component: DMD AssignedTo: nobody puremagic.com ReportedBy: andrei metalanguage.com This code doesn't compile and it should: void main() { byte x, y, z; short a = x+y; } Although the manifest type of x+y is int, the actual range of x+y, regardless of the values of x and y, is -byte.min-byte.min to byte.max+byte.max. That range fits properly in a short so the compiler should let the code go through. -- Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email ------- You are receiving this mail because: -------
Jul 06 2009
http://d.puremagic.com/issues/show_bug.cgi?id=3147 Rob Jacques <sandford jhu.edu> changed: What |Removed |Added ---------------------------------------------------------------------------- CC| |sandford jhu.edu Additionally, propagation doesn't work for byte, ubyte, bool and char. for operations + * - / % >> Also byte x,y; short z; z = x<<1; // Error: cannot implicitly convert expression (cast(int)x << 1) of type int to byte z = x << y; // compiles // Repeat for >>> Also ubyte x,y=10; ubyte z; z = -y; // compiles Inconsistancies: byte x,y; short z; z += x; //compiles, z = z + x doesn't x += y; //compiles, x = x + y doesn't x++; //compiles, x = x+1, doesn't ++x; //compiles, x = x+1, doesn't x = x + 1; // Error: cannot implicitly convert expression (cast(int)x + 1) of type int to byte // Again repeat for the other operations/type combos also byte[] x, y, z; z[] = x[] * z[]; //compiles // repeat for other array operation and type combos -- Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email ------- You are receiving this mail because: -------
Jul 07 2009
http://d.puremagic.com/issues/show_bug.cgi?id=3147 13:40:52 PST --- Some asserts for modulus and shifts --- byte b; short s; int i; long l; static assert(is(typeof(s%b)==byte)); static assert(is(typeof(i%s)==short)); static assert(is(typeof(b<<b)==int)); static assert(is(typeof(b>>i)==byte)); static assert(is(typeof(b>>>b)==byte)); static assert(is(typeof(b>>l)==byte)); --- -- Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email ------- You are receiving this mail because: -------
Nov 16 2010
http://d.puremagic.com/issues/show_bug.cgi?id=3147 13:54:16 PST --- The point is not to ascribe the smallest static type to the result. That would break compatibility with C in many ways. All that happens is the compiler tracks the range of the expression statically while using the same typing rules as C. -- Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email ------- You are receiving this mail because: -------
Nov 16 2010
http://d.puremagic.com/issues/show_bug.cgi?id=3147 14:01:34 PST --- --- l = cast(int)(s%b); l = cast(short)(s%b); --- What's the difference? -- Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email ------- You are receiving this mail because: -------
Nov 16 2010
http://d.puremagic.com/issues/show_bug.cgi?id=3147 14:22:01 PST --- In any case --- static if(__traits(compiles, s=b+b)) { static assert(__traits(compiles, b=s%b)); static assert(__traits(compiles, s=s>>b)); static assert(__traits(compiles, s=s>>>b)); } --- -- Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email ------- You are receiving this mail because: -------
Nov 16 2010
http://d.puremagic.com/issues/show_bug.cgi?id=3147 22:03:08 PST --- There should be ints in shift asserts --- static if(__traits(compiles, s=b+b)) { static assert(__traits(compiles, b=i%b)); static assert(__traits(compiles, b=b>>i)); static assert(__traits(compiles, b=b>>>i)); } --- -- Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email ------- You are receiving this mail because: -------
Nov 16 2010
http://d.puremagic.com/issues/show_bug.cgi?id=3147 kennytm gmail.com changed: What |Removed |Added ---------------------------------------------------------------------------- Keywords| |patch CC| |kennytm gmail.com https://github.com/D-Programming-Language/dmd/pull/116 -- Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email ------- You are receiving this mail because: -------
Jun 12 2011
http://d.puremagic.com/issues/show_bug.cgi?id=3147 *** Issue 6000 has been marked as a duplicate of this issue. *** -- Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email ------- You are receiving this mail because: -------
Jun 12 2011
http://d.puremagic.com/issues/show_bug.cgi?id=3147 kennytm gmail.com changed: What |Removed |Added ---------------------------------------------------------------------------- CC| |dfj1esp02 sneakemail.com *** Issue 5225 has been marked as a duplicate of this issue. *** -- Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email ------- You are receiving this mail because: -------
Jun 12 2011
http://d.puremagic.com/issues/show_bug.cgi?id=3147 yebblies <yebblies gmail.com> changed: What |Removed |Added ---------------------------------------------------------------------------- CC| |bearophile_hugs eml.cc *** Issue 5528 has been marked as a duplicate of this issue. *** -- Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email ------- You are receiving this mail because: -------
Jun 16 2011
http://d.puremagic.com/issues/show_bug.cgi?id=3147 This example was in bug 5528: void main() { uint i = 10; ubyte x1 = i % ubyte.max; ulong l = 10; uint x2 = l % uint.max; } -- Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email ------- You are receiving this mail because: -------
Jun 16 2011
http://d.puremagic.com/issues/show_bug.cgi?id=3147 Walter Bright <bugzilla digitalmars.com> changed: What |Removed |Added ---------------------------------------------------------------------------- Status|NEW |RESOLVED CC| |bugzilla digitalmars.com Resolution| |FIXED 14:45:08 PDT --- https://github.com/D-Programming-Language/dmd/commit/dce514326cbe086f35d23c4c2b24cb2dc1da659d -- Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email ------- You are receiving this mail because: -------
Jun 27 2011