Skip to content

Commit

Permalink
Revert "Use dwarf exceptions on i686 as well"
Browse files Browse the repository at this point in the history
This reverts commit ca43ab5.

It was reported in #8 that
the dwarf unwinding on i686 doesn't always work.

This commit adds a testcase for the case that didn't work previously.
  • Loading branch information
mstorsjo committed Oct 1, 2018
1 parent bc8c9c3 commit f0aa7c4
Show file tree
Hide file tree
Showing 4 changed files with 42 additions and 4 deletions.
2 changes: 1 addition & 1 deletion Dockerfile.dev
Expand Up @@ -75,7 +75,7 @@ COPY test/*.cpp ./test/
RUN cd test && \
for arch in $TOOLCHAIN_ARCHS; do \
mkdir -p $arch && \
for test in hello-cpp hello-exception tlstest-main; do \
for test in hello-cpp hello-exception tlstest-main exception-locale; do \
$arch-w64-mingw32-clang++ $test.cpp -o $arch/$test.exe || exit 1; \
done; \
for test in tlstest-lib; do \
Expand Down
2 changes: 1 addition & 1 deletion run-tests.sh
Expand Up @@ -16,7 +16,7 @@ TESTS_C="hello hello-tls crt-test setjmp"
TESTS_C_DLL="autoimport-lib"
TESTS_C_LINK_DLL="autoimport-main"
TESTS_C_NO_BUILTIN="crt-test"
TESTS_CPP="hello-cpp hello-exception tlstest-main"
TESTS_CPP="hello-cpp hello-exception tlstest-main exception-locale"
TESTS_CPP_DLL="tlstest-lib"
TESTS_SSP="ssp"
for arch in $ARCHS; do
Expand Down
33 changes: 33 additions & 0 deletions test/exception-locale.cpp
@@ -0,0 +1,33 @@
/*
* Copyright (c) 2018 SquallATF
*
* This file is part of llvm-mingw.
*
* Permission to use, copy, modify, and/or distribute this software for any
* purpose with or without fee is hereby granted, provided that the above
* copyright notice and this permission notice appear in all copies.
*
* THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
* WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
* MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
* ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
* WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
* ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
* OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
*/

#include <iostream>
#include <typeinfo>

int main(int argc, char *argv[]) {
try {
std::locale loc("test");
} catch (std::runtime_error& e) {
std::cerr << "Caught " << e.what() << std::endl;
std::cerr << "Type " << typeid(e).name() << std::endl;
} catch (...) {
std::cerr << "catch all" << std::endl;
}

return 0;
}
9 changes: 7 additions & 2 deletions wrappers/clang-target-wrapper.sh
Expand Up @@ -10,8 +10,13 @@ esac
ARCH=$(echo $TARGET | sed 's/-.*//')
case $ARCH in
i686)
# Dwarf is the default here.
ARCH_FLAGS=
# Dwarf is the default for i686, but libunwind sometimes fails to
# to unwind correctly on i686. This issue might be related to cases
# of DW_CFA_GNU_args_size (which were adjusted in libunwind SVN r337312).
# The issue can be reproduced with test/exception-locale.cpp.
# The issue goes away if building libunwind/libcxxabi/libcxx and the
# test example with -mstack-alignment=16 -mstackrealign.
ARCH_FLAGS=-fsjlj-exceptions
;;
x86_64)
# SEH is the default here.
Expand Down

0 comments on commit f0aa7c4

Please sign in to comment.