| // REQUIRED_ARGS: -o- |
| |
| bool cond; |
| |
| /* |
| TEST_OUTPUT: |
| --- |
| fail_compilation/fail12809.d(18): Error: `object.Exception` is thrown but not caught |
| fail_compilation/fail12809.d(15): Error: function `fail12809.test_finally1` may throw but is marked as `nothrow` |
| fail_compilation/fail12809.d(34): Error: `object.Exception` is thrown but not caught |
| fail_compilation/fail12809.d(38): Error: `object.Exception` is thrown but not caught |
| fail_compilation/fail12809.d(31): Error: function `fail12809.test_finally3` may throw but is marked as `nothrow` |
| --- |
| */ |
| void test_finally1() nothrow |
| { |
| try |
| throw new Exception(""); // error |
| finally |
| {} |
| } |
| |
| void test_finally2() nothrow |
| { |
| try |
| throw new Exception(""); // no error |
| finally |
| assert(0); // unconditional halt |
| } |
| |
| void test_finally3() nothrow |
| { |
| try |
| throw new Exception(""); // error |
| finally |
| { |
| if (cond) |
| throw new Exception(""); // error |
| assert(0); // conditional halt |
| } |
| } |
| |
| /* |
| TEST_OUTPUT: |
| --- |
| fail_compilation/fail12809.d(58): Error: `object.Exception` is thrown but not caught |
| fail_compilation/fail12809.d(53): Error: function `fail12809.test_finally4` may throw but is marked as `nothrow` |
| fail_compilation/fail12809.d(74): Error: `object.Exception` is thrown but not caught |
| fail_compilation/fail12809.d(78): Error: `object.Exception` is thrown but not caught |
| fail_compilation/fail12809.d(69): Error: function `fail12809.test_finally6` may throw but is marked as `nothrow` |
| --- |
| */ |
| void test_finally4() nothrow |
| { |
| try |
| {} |
| finally |
| throw new Exception(""); // error |
| } |
| |
| void test_finally5() nothrow |
| { |
| try |
| assert(0); // unconditional halt |
| finally |
| throw new Exception(""); // no error |
| } |
| |
| void test_finally6() nothrow |
| { |
| try |
| { |
| if (cond) |
| throw new Exception(""); // error |
| assert(0); // conditional halt |
| } |
| finally |
| throw new Exception(""); // error |
| } |