http://d.puremagic.com/issues/show_bug.cgi?id=5021
Summary: Associative array assigned to in spite of exception
Product: D
Version: unspecified
Platform: Other
OS/Version: Linux
Status: NEW
Severity: normal
Priority: P2
Component: DMD
AssignedTo: [email protected]
ReportedBy: [email protected]
--- Comment #0 from Jonathan M Davis <[email protected]> 2010-10-09 00:49:21
PDT ---
This program:
import std.string;
int func()
{
throw new Exception("It's an exception.");
}
void main()
{
int[string] arr;
try
{
arr["hello"] = func();
}
catch(Exception e)
{
}
assert(arr.length == 0, format("actual: %s", arr.length));
}
results in this output:
[email protected](20): actual: 1
----------------
./d(_d_assert_msg+0x18) [0x8081ab8]
./d(_Dmain+0x8f) [0x807eb0f]
./d(extern (C) int rt.dmain2.main(int, char**)) [0x8081ca6]
./d(extern (C) int rt.dmain2.main(int, char**)) [0x8081c00]
./d(extern (C) int rt.dmain2.main(int, char**)) [0x8081cea]
./d(extern (C) int rt.dmain2.main(int, char**)) [0x8081c00]
./d(main+0x96) [0x8081ba6]
/usr/lib32/libc.so.6(__libc_start_main+0xe6) [0xf75f1c76]
./d() [0x807e9a1]
The associative array should have been unchanged. The assignment never took
place because an exception was thrown before the function could return the
value to be assigned to the associative array. Since no assignment took place,
the associative array should not have changed, but it did. It has 1 value in it
where it should have 0.
--
Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email
------- You are receiving this mail because: -------