On 2014-10-03 19:35:31 +0000, Andrei Alexandrescu said:
Better yet:
int func() {
scope(exit)
return 1;
scope(exit)
return 2;
return 0;
}
2
That should return 1 as the return 1 is the last thing to execute.
SDC currently doesn't disallow this and correctly produces 1.
It'll be lowered as such:
int foo2()
{
try {
try {
return 0;
} finally {
return 2;
}
} finally {
return 1;
}
}
Worse yet:
// What does this function do? What *should* it do??
int func() {
scope(success)
throw new Exception("");
scope(failure)
return 1;
return 0;
}
1
This throws an exception, as it's already outside of the scope(failure)
block and into the finally for success;
-S