Bug 4463 – [AA] double.init in associative array seems 0.0

Status
NEW
Severity
normal
Priority
P3
Component
druntime
Product
D
Version
D2
Platform
x86
OS
All
Creation time
2010-07-15T04:24:09Z
Last change time
2024-12-07T13:31:04Z
Assigned to
Sean Kelly
Creator
bearophile_hugs
Moved to GitHub: dmd#17227 →

Comments

Comment #0 by bearophile_hugs — 2010-07-15T04:24:09Z
With dmd 2.047 this code doesn't assert at runtime (aa[0] has to be nan): void main() { double[int] aa; aa[0]++; assert(aa[0] == 1.0); }
Comment #1 by hsteoh — 2012-12-21T07:45:21Z
Seems to be related to bug 3825.
Comment #2 by dlang.org — 2016-08-18T08:22:24Z
@hsteoh: I don't believe it is related to 3825; 3825 has been apparently fixed (for d2) in 2013 (q.v.), but the behaviour described by bearophile_hugs is still present in dmd 2.071.0 :-|
Comment #3 by dlang.org — 2016-08-18T08:30:29Z
... having said that, the double behaviour is explicitly brought up in the pull request discussion pertaining to 3825: see quickfur's first comment on https://github.com/dlang/dmd/pull/1465.
Comment #4 by stanislav.blinov — 2018-11-22T18:09:24Z
Now that we have an .update() for AAs, this needs to be resolved. This test should pass: unittest { double[int] aa; aa[0]++; import std.math; assert(aa[0].isNaN); } The appropriate create/modify for non-zero-initialized types is: unittest { double[int] aa; aa.update(0, { return 0.0; }, (ref double d) { d++; return d; }); assert(aa[0] == 1.0); } Let's not let convenience defeat the type system, please.
Comment #5 by dlang — 2019-08-27T18:34:04Z
In my oppinion aa[0]++ should behave exactly the same as aa[0] = aa[0]+1. Therefore in my oppinion a correct unittest would be: unittest { import std.exception: assertThrown; import core.exception: RangeError; double[int] aa; assertThrown!RangeError(aa[0]++); } (At the moment with dmd v2.082.0 this leads to a segmentation fault, while with ldc2 1.12.0 and gdc 8.3.0 I get the expected "assertThrown failed".)
Comment #6 by robert.schadek — 2024-12-07T13:31:04Z
THIS ISSUE HAS BEEN MOVED TO GITHUB https://github.com/dlang/dmd/issues/17227 DO NOT COMMENT HERE ANYMORE, NOBODY WILL SEE IT, THIS ISSUE HAS BEEN MOVED TO GITHUB