*Keno *- I got a little ahead of myself with my last post. While
exception handling works fine in several examples, after adding the lines
to bootstrap.cpp, I now get a nasty error from Clang when using OpenCV
functions that require casting with RTTI (i.e., dyne_cast) . Such OpenCV
functions worked before adding the exception handling flags to
bootstrap.cpp.
e.g.,
julia> img = imread(filename) # => here it must convert a const char*
to const String&
Assertion failed: ((Flags & RF_IgnoreMissingEntries) && "Referenced value
not in value map!"), function RemapInstruction, file
/Users/maximilianosuster/julia-v0.4.0/deps/llvm-svn/lib/Transforms/Utils/ValueMapper.cpp,
line 194.
The error can be eliminated by commenting out the following line (and not
the others):
clang_compiler->getLangOpts().Exceptions = 1; // exception handling
This is the function that the error refers to in
Transforms/Utils/ValueMapper.cpp
void llvm::RemapInstruction(Instruction *I, ValueToValueMapTy &VMap,
RemapFlags Flags) { // Remap operands. for (User::op_iterator
op = I->op_begin(), E = I->op_end(); op != E; ++op) { Value *V =
MapValue(*op, VMap, Flags); // If we aren't ignoring missing entries, assert
that something happened. if (V != 0) *op = V; else
assert((Flags & RF_IgnoreMissingEntries) && "Referenced value not
in value map!"); }
I tried to understand what is going on, but AFAIK Clang has its own
built-in RTTI and its not entirely clear to me why switching on exceptions
in bootstrap.cpp compromises the casting of const char* to String&
reference. I tried enabling RTTI =1 and RTTIData = 1 in bootstrap.cpp and
removed the -fno-rtti flag from the BuildBootsrap.Makefile. This generated
a fatal ERROR upon Pkg.build("Cxx").
Any thoughts on what is going on?
*Lex *- thanks for the tip on the use of exceptions. The immediate aim is
to simply avoid crashing the julia REPL every time Clang does not like
something in the C++ function arguments. I would prefer eventually to
transfer most error checking/exception handling to Julia, but there are
cases where some algorithms are best executed in C++.