summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorzhanyong.wan <zhanyong.wan@861a406c-534a-0410-8894-cb66d6ee9925>2010-07-08 21:44:59 (GMT)
committerzhanyong.wan <zhanyong.wan@861a406c-534a-0410-8894-cb66d6ee9925>2010-07-08 21:44:59 (GMT)
commit5e4214cee4f74d25f1d89dc1c95dc247ed20b6c8 (patch)
tree4191968879b2cf55f8f23b54479ac893336b2247
parent682c89f7557eb53c7359b6cbf3670c05165f2419 (diff)
downloadgoogletest-5e4214cee4f74d25f1d89dc1c95dc247ed20b6c8.zip
googletest-5e4214cee4f74d25f1d89dc1c95dc247ed20b6c8.tar.gz
googletest-5e4214cee4f74d25f1d89dc1c95dc247ed20b6c8.tar.bz2
Makes gtest_break_on_failure_unittest work on minGW (by vladl); improves
the NULL-dereferencing hack to work with LLVM (by chandlerc).
-rw-r--r--src/gtest.cc6
-rw-r--r--test/gtest_break_on_failure_unittest_.cc2
2 files changed, 6 insertions, 2 deletions
diff --git a/src/gtest.cc b/src/gtest.cc
index cb2c34c..9855f53 100644
--- a/src/gtest.cc
+++ b/src/gtest.cc
@@ -3608,7 +3608,11 @@ void UnitTest::AddTestPartResult(TestPartResult::Type result_type,
// the --gtest_catch_exceptions flags are specified.
DebugBreak();
#else
- *static_cast<int*>(NULL) = 1;
+ // Dereference NULL through a volatile pointer to prevent the compiler
+ // from removing. We use this rather than abort() or __builtin_trap() for
+ // portability: Symbian doesn't implement abort() well, and some debuggers
+ // don't correctly trap abort().
+ *static_cast<volatile int*>(NULL) = 1;
#endif // GTEST_OS_WINDOWS
} else if (GTEST_FLAG(throw_on_failure)) {
#if GTEST_HAS_EXCEPTIONS
diff --git a/test/gtest_break_on_failure_unittest_.cc b/test/gtest_break_on_failure_unittest_.cc
index d28d1d3..6779c90 100644
--- a/test/gtest_break_on_failure_unittest_.cc
+++ b/test/gtest_break_on_failure_unittest_.cc
@@ -69,7 +69,7 @@ int main(int argc, char **argv) {
// a general protection fault (segment violation).
SetErrorMode(SEM_NOGPFAULTERRORBOX | SEM_FAILCRITICALERRORS);
-#if !GTEST_OS_WINDOWS_MOBILE
+#if GTEST_HAS_SEH && !GTEST_OS_WINDOWS_MOBILE
// The default unhandled exception filter does not always exit
// with the exception code as exit code - for example it exits with
// 0 for EXCEPTION_ACCESS_VIOLATION and 1 for EXCEPTION_BREAKPOINT