cannot build with exceptions
xantares opened this issue · 3 comments
Hi again,
Why are exceptions disabled ?
Would it require to link against a cross-compiled version of llvm custom stdlib "libc++" ?
xan.
Exceptions are disabled because clang doesn't support exceptions on Windows.
Quoting http://clang.llvm.org/docs/MSVCCompatibility.html
Exceptions and SEH: Minimal. Clang can parse both constructs, but does not know how to emit compatible handlers. Clang cannot throw exceptions but it can rethrow them.
I have added -fno-exceptions
to cause a clear compiler error rather than weird linker errors.
Latest Clang from trunk:
$ cat test.cpp
#include <new>
#include <iostream>
int main()
{
try { new char[-1u]; }
catch(...) { std::cerr << "exception" << std::endl; }
return 0;
}
$ WCLANG_FORCE_CXX_EXCEPTIONS=1 w32-clang++ test.cpp -wc-verbose -wc-static-runtime
wclang: verbose: command in: w32-clang++ test.cpp -wc-verbose -wc-static-runtime
wclang: verbose: command out: /opt/other/llvm-trunk/bin/clang++ -static-libgcc -static-libstdc++ -target i686-w64-mingw32 -nostdinc -isystem /opt/other/llvm-trunk/bin/../lib/clang/3.6.0/include -isystem /usr/i686-w64-mingw32/include -isystem /usr/i686-w64-mingw32/include/../../../usr/lib/gcc/i686-w64-mingw32/4.9-win32/include/c++ -isystem /usr/i686-w64-mingw32/include/../../../usr/lib/gcc/i686-w64-mingw32/4.9-win32/include/c++/i686-w64-mingw32 test.cpp
wclang: verbose: start +0.001 ms
wclang: verbose: end +0.277 ms
/tmp/test-dfc3c5.o:(.text+0x122): undefined reference to `_Unwind_Resume'
/tmp/test-dfc3c5.o:(.eh_frame+0x63): undefined reference to `__gxx_personality_v0'
collect2: error: ld returned 1 exit status
clang-3.6: error: linker (via gcc) command failed with exit code 1 (use -v to see invocation)
hello,
although not advertised from v3.6 changelog, there as been work in clang regarding windows exceptions
from http://planet.clang.org/:
- Clang gained initial support for Win64 SEH IR emission, http://reviews.llvm.org/rL226760
- Initial support for Win64 SEH catch handlers has landed. See the commit message for current missing functionality: http://reviews.llvm.org/rL225904
- Reid Kleckner has posted an RFC on approaches to representing structured exception handling (SEH) in LLVM IR. This is the exception handling model used on Windows:
http://article.gmane.org/gmane.comp.compilers.clang.devel/39152 - The documentation on MSVC compatibility has been updated to represent the current state of affairs. Clang has also gained support for rethrowing MS C++ exceptions. r222731, r222733.
Does this allow to generate exception with mingw ?
Yes, 64-bit SEH exceptions are working now with trunk (3.7), but not with 3.6, as 3.6 was branched before exception support was added.
I have removed the -fno-exceptions
flag for 3.7 + 64-bit.