Suppresses the tail-call optimization of StackGrowsDown() in GCC4.6 (by Paul Pluzhnikov).
This commit is contained in:
		@@ -936,15 +936,17 @@ static int ExecDeathTestChildMain(void* child_arg) {
 | 
				
			|||||||
// GTEST_NO_INLINE_ is required to prevent GCC 4.6 from inlining
 | 
					// GTEST_NO_INLINE_ is required to prevent GCC 4.6 from inlining
 | 
				
			||||||
// StackLowerThanAddress into StackGrowsDown, which then doesn't give
 | 
					// StackLowerThanAddress into StackGrowsDown, which then doesn't give
 | 
				
			||||||
// correct answer.
 | 
					// correct answer.
 | 
				
			||||||
bool StackLowerThanAddress(const void* ptr) GTEST_NO_INLINE_;
 | 
					void StackLowerThanAddress(const void* ptr, bool* result) GTEST_NO_INLINE_;
 | 
				
			||||||
bool StackLowerThanAddress(const void* ptr) {
 | 
					void StackLowerThanAddress(const void* ptr, bool* result) {
 | 
				
			||||||
  int dummy;
 | 
					  int dummy;
 | 
				
			||||||
  return &dummy < ptr;
 | 
					  *result = (&dummy < ptr);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
bool StackGrowsDown() {
 | 
					bool StackGrowsDown() {
 | 
				
			||||||
  int dummy;
 | 
					  int dummy;
 | 
				
			||||||
  return StackLowerThanAddress(&dummy);
 | 
					  bool result;
 | 
				
			||||||
 | 
					  StackLowerThanAddress(&dummy, &result);
 | 
				
			||||||
 | 
					  return result;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// A threadsafe implementation of fork(2) for threadsafe-style death tests
 | 
					// A threadsafe implementation of fork(2) for threadsafe-style death tests
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user