Custom Query (145 matches)
Results (16 - 18 of 145)
Ticket | Resolution | Summary | Owner | Reporter |
---|---|---|---|---|
#164 | fixed | Resumption Re-Throw Error After Another Throw | ||
Description |
This is a slightly modified version of a failing test (see resume.cfa test for the original) that removes some of the current patch syntax. Ignoring that difference this is a test case that is currently failing. try { try { printf("throwing first exception\n"); yin black; throwResume &black; } catchResume (yin * first) { printf("caught first exception\n"); try { printf("throwing second exception\n"); yang white; throwResume &white; } catchResume (yang * second) { printf("caught second exception\n"); } throwResume; } } catchResume (yin * first) { printf("recaught first exception\n"); } catchResume (yang * second) { printf("caught second exception (bad location)\n"); } Expected output: throwing first exception caught first exception throwing second exception caught second exception recaught first exception The actual output adds "(bad location)" to the second last line. What appears to be happening is that the internal exception is being thrown from where the re-throw should be thrown, despite the fact that new handler frames have been pushed onto the stack since then. |
|||
#165 | fixed | Exceptions in the Exceptions File | ||
Description |
I have found one case where the exception system can't handle exceptions. In this case if the resumpution exception function is unwound (because of a termination exception) it will not clean-up the state of the EHM properly because it doesn't run any clean-up code then. There may be other cases where unwinding across functions in exception.c causes problems. This could be fixed by moving that section to Cforall or by compiling that file with -fexceptions, which may interfere with the assembly we are creating. See exceptions/interact for a disabled test showed this, expected output is: throwing resume moon resumption moon catch, will terminate termination catch throwing resume star resumption star catch |
|||
#173 | fixed | Catch Declaration not Seen by Condition (New AST only) | ||
Description |
There is a bug where the declaration of a catch clause is not in scope when resolving the condition. This means the condition can't use the exception that has been caught to decide whether or not to handle it. A common use case. The old AST has a rather messy fix that rewrites the catch statement into an encoded form and then undoing the operation before passing it onto another pass. However this doesn't work for the new AST and a different solution will be needed. |