digitalmars.D.bugs - [Issue 3064] New: Invalid array operation accepted, generates bad code
- d-bugmail puremagic.com (45/45) Jun 11 2009 http://d.puremagic.com/issues/show_bug.cgi?id=3064
- d-bugmail puremagic.com (12/12) May 03 2010 http://d.puremagic.com/issues/show_bug.cgi?id=3064
- d-bugmail puremagic.com (22/22) May 03 2010 http://d.puremagic.com/issues/show_bug.cgi?id=3064
- d-bugmail puremagic.com (7/19) May 03 2010 http://d.puremagic.com/issues/show_bug.cgi?id=3064
- d-bugmail puremagic.com (12/12) May 31 2010 http://d.puremagic.com/issues/show_bug.cgi?id=3064
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
http://d.puremagic.com/issues/show_bug.cgi?id=3064
Don <clugdbug yahoo.com.au> changed:
What |Removed |Added
----------------------------------------------------------------------------
Status|NEW |RESOLVED
CC| |clugdbug yahoo.com.au
Resolution| |FIXED
Fixed DMD1.059 and 2.044
--
Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email
------- You are receiving this mail because: -------
May 03 2010
http://d.puremagic.com/issues/show_bug.cgi?id=3064
bearophile_hugs eml.cc changed:
What |Removed |Added
----------------------------------------------------------------------------
Status|RESOLVED |REOPENED
CC| |bearophile_hugs eml.cc
Resolution|FIXED |
Reopened, because this wrong code compiles still with dmd v2.044, the bug
persists:
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);
}
--
Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email
------- You are receiving this mail because: -------
May 03 2010
http://d.puremagic.com/issues/show_bug.cgi?id=3064
Reopened, because this wrong code compiles still with dmd v2.044, the bug
persists:
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);
}
Oops, it's fixed only in my personal copy, not in the official DMD.
--
Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email
------- You are receiving this mail because: -------
May 03 2010
http://d.puremagic.com/issues/show_bug.cgi?id=3064
Walter Bright <bugzilla digitalmars.com> changed:
What |Removed |Added
----------------------------------------------------------------------------
Status|REOPENED |RESOLVED
CC| |bugzilla digitalmars.com
Resolution| |FIXED
19:03:32 PDT ---
http://www.dsource.org/projects/dmd/changeset/509
--
Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email
------- You are receiving this mail because: -------
May 31 2010









d-bugmail puremagic.com 