[Mono-list] patch for mono/jit/exception.c
Dietmar Maurer
dietmar@ximian.com
13 May 2002 09:56:50 +0200
I would like to include those tests, please add them.
- Dietmar
On Sun, 2002-05-05 at 07:48, Linus Upson wrote:
Attached is a test class mcs/class/corlib/Test/System/ExceptionTest.cs
which implements an NUnit test case for the exception described
previously. Also attached is the corresponding patch for
System/AllTests.cs. The ExceptionTest class only tests for this one
issue and so isn't a very good test of the Exception class as a whole. I
don't know if you want to include stub tests like this or not.
Linus
-----Original Message-----
From: mono-list-admin@ximian.com [mailto:mono-list-admin@ximian.com] On
Behalf Of Linus Upson
Sent: Saturday, May 04, 2002 2:39 PM
To: mono-list@ximian.com
Subject: RE: [Mono-list] patch for mono/jit/exception.c
I forgot to include the small test program which demonstrates the
problem:
using System;
public class TryTest {
public static void ThrowException() {
throw new Exception();
}
public static void Main() {
ThrowException();
// If the following line is uncommented, mono will work
right.
// Console.WriteLine("This shouldn't matter");
try {
Console.WriteLine("In try block");
} catch (Exception e) {
Console.WriteLine("------------------------");
Console.WriteLine(e);
Console.WriteLine("------------------------");
}
}
}
Before the patch, the Exception thrown in ThrowException() would be
caught by the catch block in Main().
Linus
-----Original Message-----
From: mono-list-admin@ximian.com [mailto:mono-list-admin@ximian.com] On
Behalf Of Linus Upson
Sent: Saturday, May 04, 2002 2:09 PM
To: mono-list@ximian.com
Subject: [Mono-list] patch for mono/jit/exception.c
Running NUnitConsole_mono.exe in mono on Windows exposed the following
bug:
If an exception were throw by the instruction immediately preceding a
try block, the exception would be considered to be thrown inside the try
block.
A patch is attached which appears to solve the problem. The patch won't
work if arch_handle_exception() can be called with ctx->SC_EIP pointing
to the instruction which threw the exception. I think an exception can
only be thrown by a CALL (as far as managed code is concerned) so EIP
will always point to the instruction after the CALL. If this isn't the
case, a different fix will be needed.
I believe the same problem exists on Linux as well, but I haven't
tested.
Cheers,
Linus
_______________________________________________
Mono-list maillist - Mono-list@ximian.com
http://lists.ximian.com/mailman/listinfo/mono-list