Thread overview | |||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
July 07, 2009 [Issue 3147] New: Incorrect value range propagation for addition | ||||
---|---|---|---|---|
| ||||
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: ------- |
July 07, 2009 [Issue 3147] Incorrect value range propagation for addition | ||||
---|---|---|---|---|
| ||||
Posted in reply to andrei@metalanguage.com | http://d.puremagic.com/issues/show_bug.cgi?id=3147 Rob Jacques <sandford@jhu.edu> changed: What |Removed |Added ---------------------------------------------------------------------------- CC| |sandford@jhu.edu --- Comment #1 from Rob Jacques <sandford@jhu.edu> 2009-07-07 08:07:25 PDT --- 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: ------- |
November 16, 2010 [Issue 3147] Incorrect value range propagation for addition | ||||
---|---|---|---|---|
| ||||
Posted in reply to andrei@metalanguage.com | http://d.puremagic.com/issues/show_bug.cgi?id=3147 --- Comment #2 from Sobirari Muhomori <dfj1esp02@sneakemail.com> 2010-11-16 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: ------- |
November 16, 2010 [Issue 3147] Incorrect value range propagation for addition | ||||
---|---|---|---|---|
| ||||
Posted in reply to andrei@metalanguage.com | http://d.puremagic.com/issues/show_bug.cgi?id=3147 --- Comment #3 from Andrei Alexandrescu <andrei@metalanguage.com> 2010-11-16 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: ------- |
November 16, 2010 [Issue 3147] Incorrect value range propagation for addition | ||||
---|---|---|---|---|
| ||||
Posted in reply to andrei@metalanguage.com | http://d.puremagic.com/issues/show_bug.cgi?id=3147 --- Comment #4 from Sobirari Muhomori <dfj1esp02@sneakemail.com> 2010-11-16 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: ------- |
November 16, 2010 [Issue 3147] Incorrect value range propagation for addition | ||||
---|---|---|---|---|
| ||||
Posted in reply to andrei@metalanguage.com | http://d.puremagic.com/issues/show_bug.cgi?id=3147 --- Comment #5 from Sobirari Muhomori <dfj1esp02@sneakemail.com> 2010-11-16 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: ------- |
November 17, 2010 [Issue 3147] Incorrect value range propagation for addition | ||||
---|---|---|---|---|
| ||||
Posted in reply to andrei@metalanguage.com | http://d.puremagic.com/issues/show_bug.cgi?id=3147 --- Comment #6 from Sobirari Muhomori <dfj1esp02@sneakemail.com> 2010-11-16 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: ------- |
June 12, 2011 [Issue 3147] Incorrect value range propagation for addition | ||||
---|---|---|---|---|
| ||||
Posted in reply to andrei@metalanguage.com | http://d.puremagic.com/issues/show_bug.cgi?id=3147 kennytm@gmail.com changed: What |Removed |Added ---------------------------------------------------------------------------- Keywords| |patch CC| |kennytm@gmail.com --- Comment #7 from kennytm@gmail.com 2011-06-12 11:05:38 PDT --- DMD pull #116. 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: ------- |
June 12, 2011 [Issue 3147] Incorrect value range propagation for addition | ||||
---|---|---|---|---|
| ||||
Posted in reply to andrei@metalanguage.com | http://d.puremagic.com/issues/show_bug.cgi?id=3147 --- Comment #8 from kennytm@gmail.com 2011-06-12 11:06:25 PDT --- *** 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: ------- |
June 12, 2011 [Issue 3147] Incorrect value range propagation for addition | ||||
---|---|---|---|---|
| ||||
Posted in reply to andrei@metalanguage.com | http://d.puremagic.com/issues/show_bug.cgi?id=3147 kennytm@gmail.com changed: What |Removed |Added ---------------------------------------------------------------------------- CC| |dfj1esp02@sneakemail.com --- Comment #9 from kennytm@gmail.com 2011-06-12 11:07:25 PDT --- *** 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: ------- |
Copyright © 1999-2021 by the D Language Foundation