fixes a problem caused by gcc 4.6 optimization (by Paul Pluzhnikov)

This commit is contained in:
zhanyong.wan 2011-04-14 19:36:05 +00:00
parent 6a5a25b1e1
commit c006f8c12b
2 changed files with 12 additions and 0 deletions

View File

@ -662,6 +662,13 @@
# define GTEST_API_
#endif
#if defined(__GNUC__)
// Ask the compiler to never inline a given function.
#define GTEST_NO_INLINE_ __attribute__((noinline))
#else
#define GTEST_NO_INLINE_
#endif // __GNUC__
namespace testing {
class Message;

View File

@ -932,6 +932,11 @@ static int ExecDeathTestChildMain(void* child_arg) {
// This could be accomplished more elegantly by a single recursive
// function, but we want to guard against the unlikely possibility of
// a smart compiler optimizing the recursion away.
//
// GTEST_NO_INLINE_ is required to prevent GCC 4.6 from inlining
// StackLowerThanAddress into StackGrowsDown, which then doesn't give
// correct answer.
bool StackLowerThanAddress(const void* ptr) GTEST_NO_INLINE_;
bool StackLowerThanAddress(const void* ptr) {
int dummy;
return &dummy < ptr;