|
Archives
D Programming
digitalmars.Ddigitalmars.D.bugs digitalmars.D.dtl digitalmars.D.ide digitalmars.D.dwt digitalmars.D.announce digitalmars.D.learn digitalmars.D.debugger D.gnu D C/C++ Programming
c++c++.announce c++.atl c++.beta c++.chat c++.command-line c++.dos c++.dos.16-bits c++.dos.32-bits c++.idde c++.mfc c++.rtl c++.stl c++.stl.hp c++.stl.port c++.stl.sgi c++.stlsoft c++.windows c++.windows.16-bits c++.windows.32-bits c++.wxwindows digitalmars.empire digitalmars.DMDScript electronics |
digitalmars.D.bugs - [Issue 3064] New: Invalid array operation accepted, generates bad code
http://d.puremagic.com/issues/show_bug.cgi?id=3064 Summary: Invalid array operation accepted, generates bad code Product: D Version: 1.045 Platform: x86_64 URL: http://www.digitalmars.com/d/1.0/arrays.html OS/Version: Linux Status: NEW Keywords: accepts-invalid, wrong-code Severity: major Priority: P2 Component: DMD AssignedTo: nobody puremagic.com ReportedBy: matti.niemenmaa+dbugzilla iki.fi The following compiles in DMD 1.045, but shouldn't: void main() { int[] a = [1,2]; int[] b = [1,2]; a[] += b; assert (b[0] == 1); assert (b[1] == 2); assert (a[0] == 2); assert (a[1] == 4); } Currently, the code compiles but the third assertion fails, since DMD generates code as though b were an int. Note that the following both compiles and doesn't assert: void main() { int[] a = [1,2]; int[] b = [1,2]; a[] += b; assert (b[0] == 1); assert (b[1] == 2); assert (a[0] == 1+*cast(int*)&b); assert (a[1] == 2+*cast(int*)&b); } This is, of course, nonsense. The error is in the line 'a[] += b': according to http://www.digitalmars.com/d/1.0/arrays.html "[t]he rvalue can be an expression consisting either of an array slice of the same length and type as the lvalue or an expression of the element type of the lvalue, in any combination." Thus the line is incorrect and should read 'a[] += b[]', and that indeed works. -- Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email ------- You are receiving this mail because: ------- Jun 11 2009
|