Fixes XL C++ 10.1 compiler errors (based on patch by Hady Zalek); cleans up formatting of GTEST_NO_INLINE_.
This commit is contained in:
		@@ -195,22 +195,31 @@ class GTEST_API_ ScopedTrace {
 | 
				
			|||||||
template <typename T>
 | 
					template <typename T>
 | 
				
			||||||
String StreamableToString(const T& streamable);
 | 
					String StreamableToString(const T& streamable);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// The Symbian compiler has a bug that prevents it from selecting the
 | 
				
			||||||
 | 
					// correct overload of FormatForComparisonFailureMessage (see below)
 | 
				
			||||||
 | 
					// unless we pass the first argument by reference.  If we do that,
 | 
				
			||||||
 | 
					// however, Visual Age C++ 10.1 generates a compiler error.  Therefore
 | 
				
			||||||
 | 
					// we only apply the work-around for Symbian.
 | 
				
			||||||
 | 
					#if defined(__SYMBIAN32__)
 | 
				
			||||||
 | 
					# define GTEST_CREF_WORKAROUND_ const&
 | 
				
			||||||
 | 
					#else
 | 
				
			||||||
 | 
					# define GTEST_CREF_WORKAROUND_
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// When this operand is a const char* or char*, if the other operand
 | 
					// When this operand is a const char* or char*, if the other operand
 | 
				
			||||||
// is a ::std::string or ::string, we print this operand as a C string
 | 
					// is a ::std::string or ::string, we print this operand as a C string
 | 
				
			||||||
// rather than a pointer (we do the same for wide strings); otherwise
 | 
					// rather than a pointer (we do the same for wide strings); otherwise
 | 
				
			||||||
// we print it as a pointer to be safe.
 | 
					// we print it as a pointer to be safe.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// This internal macro is used to avoid duplicated code.
 | 
					// This internal macro is used to avoid duplicated code.
 | 
				
			||||||
// Making the first operand const reference works around a bug in the
 | 
					 | 
				
			||||||
// Symbian compiler which is unable to select the correct specialization of
 | 
					 | 
				
			||||||
// FormatForComparisonFailureMessage.
 | 
					 | 
				
			||||||
#define GTEST_FORMAT_IMPL_(operand2_type, operand1_printer)\
 | 
					#define GTEST_FORMAT_IMPL_(operand2_type, operand1_printer)\
 | 
				
			||||||
inline String FormatForComparisonFailureMessage(\
 | 
					inline String FormatForComparisonFailureMessage(\
 | 
				
			||||||
    operand2_type::value_type* const& str, const operand2_type& /*operand2*/) {\
 | 
					    operand2_type::value_type* GTEST_CREF_WORKAROUND_ str, \
 | 
				
			||||||
 | 
					    const operand2_type& /*operand2*/) {\
 | 
				
			||||||
  return operand1_printer(str);\
 | 
					  return operand1_printer(str);\
 | 
				
			||||||
}\
 | 
					}\
 | 
				
			||||||
inline String FormatForComparisonFailureMessage(\
 | 
					inline String FormatForComparisonFailureMessage(\
 | 
				
			||||||
    const operand2_type::value_type* const& str, \
 | 
					    const operand2_type::value_type* GTEST_CREF_WORKAROUND_ str, \
 | 
				
			||||||
    const operand2_type& /*operand2*/) {\
 | 
					    const operand2_type& /*operand2*/) {\
 | 
				
			||||||
  return operand1_printer(str);\
 | 
					  return operand1_printer(str);\
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
@@ -233,13 +242,10 @@ GTEST_FORMAT_IMPL_(::wstring, String::ShowWideCStringQuoted)
 | 
				
			|||||||
// printed is a char/wchar_t pointer and the other operand is not a
 | 
					// printed is a char/wchar_t pointer and the other operand is not a
 | 
				
			||||||
// string/wstring object.  In such cases, we just print the operand as
 | 
					// string/wstring object.  In such cases, we just print the operand as
 | 
				
			||||||
// a pointer to be safe.
 | 
					// a pointer to be safe.
 | 
				
			||||||
//
 | 
					 | 
				
			||||||
// Making the first operand const reference works around a bug in the
 | 
					 | 
				
			||||||
// Symbian compiler which is unable to select the correct specialization of
 | 
					 | 
				
			||||||
// FormatForComparisonFailureMessage.
 | 
					 | 
				
			||||||
#define GTEST_FORMAT_CHAR_PTR_IMPL_(CharType)                       \
 | 
					#define GTEST_FORMAT_CHAR_PTR_IMPL_(CharType)                       \
 | 
				
			||||||
  template <typename T>                                             \
 | 
					  template <typename T>                                             \
 | 
				
			||||||
  String FormatForComparisonFailureMessage(CharType* const& p, const T&) { \
 | 
					  String FormatForComparisonFailureMessage(CharType* GTEST_CREF_WORKAROUND_ p, \
 | 
				
			||||||
 | 
					                                           const T&) { \
 | 
				
			||||||
    return PrintToString(static_cast<const void*>(p));              \
 | 
					    return PrintToString(static_cast<const void*>(p));              \
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -662,12 +662,12 @@
 | 
				
			|||||||
# define GTEST_API_
 | 
					# define GTEST_API_
 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#if defined(__GNUC__)
 | 
					#ifdef __GNUC__
 | 
				
			||||||
// Ask the compiler to never inline a given function.
 | 
					// Ask the compiler to never inline a given function.
 | 
				
			||||||
# define GTEST_NO_INLINE_ __attribute__((noinline))
 | 
					# define GTEST_NO_INLINE_ __attribute__((noinline))
 | 
				
			||||||
#else
 | 
					#else
 | 
				
			||||||
# define GTEST_NO_INLINE_
 | 
					# define GTEST_NO_INLINE_
 | 
				
			||||||
#endif  // __GNUC__
 | 
					#endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
namespace testing {
 | 
					namespace testing {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user