This is primarily a Cxx.jl issue, though you might run into problem if
you're trying to unwind through non-C++ frames later. In any case, in the
spirit of experimentation, you can enable exception handling by setting the
appropriate options from here:

https://github.com/llvm-mirror/clang/blob/master/include/clang/Basic/LangOptions.def#L106-L109

in bootstrap.cpp, e.g. here:
    https://github.com/Keno/Cxx.jl/blob/master/src/bootstrap.cpp#L464

On Sun, Nov 30, 2014 at 5:59 PM, Max Suster <mxsst...@gmail.com> wrote:

> Hi
>
> I am not very familiar with the mechanics of exception handling in Clang
> and I realize that exceptions (throw/catch) work well in Julia itself.
> However, I am specifically trying to use exception handling in C++ code
> nested inside Julia with Cxx.jl. I noticed exception handling is meant to
> be switched off by default in Clang, but still it seems to me that it would
> be very useful to have it switched on when dealing with GUI applications.
>
> I tried several C++ exceptions (e.g., throw/catch, std::exception) but it
> seems they are disabled in my current Julia-v0.4.0-dev build (OSX 10.9.5).
> Since I did not use the -fno-exceptions flag to build Julia, I wonder
> why/where exceptions are switched off when I built Julia.
>
> In Xcode(with libc++-LLVM, C++11), I can run the following script with
> C++ exceptions and it works:
>
> const int ZeroDivisionError = 1;
> double divide(double x, double y)
> {
>       if(y==0)
>       {
>            throw ZeroDivisionError;
>       }
>       return x/y;
> }
>
> int main()
> {
>       try
>       {
>            divide(1, 0);
>       }
>       catch(int i)
>       {
>             if(i==ZeroDivisionError)
>             {
>                   std::cerr<<"Divide by zero error";
>             }
>       }
> }
>
> *Divide by zero error *Program ended with exit code: 0
> However, when I try to compile essentially the same code in Julia (with
> Cxx), I see the following ERROR:
>
> julia> cxx"""
> #include <iostream> //std::cerr
> const int ZeroDivisionError = 1;
> double divide(double x, double y)
> {
>       if(y==0)
>       {
>            throw ZeroDivisionError;
>       }
>       return x/y;
> }
>
> void exceptiontest()
> {
>       try
>       {
>            divide(1, 0);
>       }
>       catch(int i)
>       {
>             if(i==ZeroDivisionError)
>             {
>                   std::cerr<<"Divide by zero error";
>             }
>       }
> }
>
> In file included from :1:
> :9:25: error: cannot use 'throw' with exceptions disabled
> throw ZeroDivisionError;
> ^
> :16:20: error: cannot use 'try' with exceptions disabled
> try
> ^
>
> Does anyone know how I can switch on exception handling in Clang for
> building Julia?
> Alternatively, if the exception flag is already included by default, then
> at least I know to focus on why it is not being used by Cxx.
>
> Thank you for your time.
>
> Max
>

Reply via email to