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:
parent
c006f8c12b
commit
c91a353c47
@ -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 {
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user