Makes gtest_break_on_failure_unittest work on minGW (by vladl); improves

the NULL-dereferencing hack to work with LLVM (by chandlerc).
This commit is contained in:
zhanyong.wan 2010-07-08 21:44:59 +00:00
parent 682c89f755
commit 5e4214cee4
2 changed files with 6 additions and 2 deletions

View File

@ -3608,7 +3608,11 @@ void UnitTest::AddTestPartResult(TestPartResult::Type result_type,
// the --gtest_catch_exceptions flags are specified. // the --gtest_catch_exceptions flags are specified.
DebugBreak(); DebugBreak();
#else #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 #endif // GTEST_OS_WINDOWS
} else if (GTEST_FLAG(throw_on_failure)) { } else if (GTEST_FLAG(throw_on_failure)) {
#if GTEST_HAS_EXCEPTIONS #if GTEST_HAS_EXCEPTIONS

View File

@ -69,7 +69,7 @@ int main(int argc, char **argv) {
// a general protection fault (segment violation). // a general protection fault (segment violation).
SetErrorMode(SEM_NOGPFAULTERRORBOX | SEM_FAILCRITICALERRORS); 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 // The default unhandled exception filter does not always exit
// with the exception code as exit code - for example it exits with // with the exception code as exit code - for example it exits with
// 0 for EXCEPTION_ACCESS_VIOLATION and 1 for EXCEPTION_BREAKPOINT // 0 for EXCEPTION_ACCESS_VIOLATION and 1 for EXCEPTION_BREAKPOINT