www.digitalmars.com         C & C++   DMDScript  

digitalmars.D - More LDC Exception Handling Stuff

reply dsimcha <dsimcha yahoo.com> writes:
When people say that exception handling doesn't work on LDC in some
circumstances, does this mean that if the code uses exceptions it won't work,
that you can't catch exceptions or something else?  If you just can't catch
exceptions, it could still be useful to me for some data mining code that I
sometimes write that has huge memory requirements (meaning I need 64-bit) but
absolutely no robustness requirements (I pretty much treat all exceptions as
unrecoverable because the program will only be run a few times and worrying
about these details is a waste of my time.)  Would I be able to use LDC on
platforms where exception handling isn't supported, with library code that
throws exceptions, as long as I didn't care about catching these exceptions?
Dec 31 2008
next sibling parent Frits van Bommel <fvbommel REMwOVExCAPSs.nl> writes:
dsimcha wrote:
 When people say that exception handling doesn't work on LDC in some
 circumstances, does this mean that if the code uses exceptions it won't work,
 that you can't catch exceptions or something else?  If you just can't catch
 exceptions, it could still be useful to me for some data mining code that I
 sometimes write that has huge memory requirements (meaning I need 64-bit) but
 absolutely no robustness requirements (I pretty much treat all exceptions as
 unrecoverable because the program will only be run a few times and worrying
 about these details is a waste of my time.)  Would I be able to use LDC on
 platforms where exception handling isn't supported, with library code that
 throws exceptions, as long as I didn't care about catching these exceptions?

Even "uncaught" exceptions get caught by the runtime. Last I checked on my (x86-64 Linux) machine, this code segfaults in the runtime when compiled with LDC: ----- void main() { throw new Exception("test"); } ----- I'm not sure what the throwing code does if you set rt_trapExceptions to false. It might just terminate the program, so try it and see; add something like the following code to one of your modules: ----- extern extern (C) bool rt_trapExceptions; static this() { rt_trapExceptions = false; } ----- (Note: This only works with Tango)
Jan 01 2009
prev sibling parent reply Christian Kamm <kamm-incasoftware removethis.de> writes:
dsimcha wrote:
 When people say that exception handling doesn't work on LDC in some
 circumstances, does this mean that if the code uses exceptions it won't
 work, that you can't catch exceptions or something else?

That really depends. It could mean that exception handling is buggy (LLVM bug in x86-64) or that something is fundamentally amiss (Windows) and unwinding the stack to the correct catch clause does not work. In the latter case, we make 'throw' print out a message and terminate the program instead.
 Would I be able to use LDC on 
 platforms where exception handling isn't supported, with library code that
 throws exceptions, as long as I didn't care about catching these
 exceptions?

I'd expect so, though it hasn't been tried.
Jan 01 2009
parent reply Don <nospam nospam.com> writes:
Christian Kamm wrote:
 dsimcha wrote:
 When people say that exception handling doesn't work on LDC in some
 circumstances, does this mean that if the code uses exceptions it won't
 work, that you can't catch exceptions or something else?

That really depends. It could mean that exception handling is buggy (LLVM bug in x86-64) or that something is fundamentally amiss (Windows) and unwinding the stack to the correct catch clause does not work. In the latter case, we make 'throw' print out a message and terminate the program instead.
 Would I be able to use LDC on 
 platforms where exception handling isn't supported, with library code that
 throws exceptions, as long as I didn't care about catching these
 exceptions?

I'd expect so, though it hasn't been tried.

Jan 01 2009
parent reply Christian Kamm <kamm-incasoftware removethis.de> writes:
Don wrote:

 Christian Kamm wrote:
 dsimcha wrote:
 When people say that exception handling doesn't work on LDC in some
 circumstances, does this mean that if the code uses exceptions it won't
 work, that you can't catch exceptions or something else?

That really depends. It could mean that exception handling is buggy (LLVM bug in x86-64) or that something is fundamentally amiss (Windows) and unwinding the stack to the correct catch clause does not work. In the latter case, we make 'throw' print out a message and terminate the program instead.
 Would I be able to use LDC on
 platforms where exception handling isn't supported, with library code
 that throws exceptions, as long as I didn't care about catching these
 exceptions?

I'd expect so, though it hasn't been tried.


LDC, the runtime, tango-user, code using exception handling - all on x86-32 or x86-64 Linux: yes, they do compile. Did I misunderstand the question?
Jan 01 2009
parent Don <nospam nospam.com> writes:
Christian Kamm wrote:
 Don wrote:
 
 Christian Kamm wrote:
 dsimcha wrote:
 When people say that exception handling doesn't work on LDC in some
 circumstances, does this mean that if the code uses exceptions it won't
 work, that you can't catch exceptions or something else?

bug in x86-64) or that something is fundamentally amiss (Windows) and unwinding the stack to the correct catch clause does not work. In the latter case, we make 'throw' print out a message and terminate the program instead.
 Would I be able to use LDC on
 platforms where exception handling isn't supported, with library code
 that throws exceptions, as long as I didn't care about catching these
 exceptions?



LDC, the runtime, tango-user, code using exception handling - all on x86-32 or x86-64 Linux: yes, they do compile. Did I misunderstand the question?

Jan 02 2009