diff -ur gtest-1.6.0.orig//include/gtest/gtest-printers.h gtest-1.6.0/include/gtest/gtest-printers.h
--- gtest-1.6.0.orig//include/gtest/gtest-printers.h	2011-02-24 13:05:24.000000000 -0500
+++ gtest-1.6.0/include/gtest/gtest-printers.h	2011-03-01 23:30:43.971000000 -0500
@@ -306,6 +306,11 @@
   if (p == NULL) {
     *os << "NULL";
   } else {
+#ifdef __BORLANDC__
+    // Silences warnings: "Condition is always true", "unreachable code"
+# pragma option push -w-ccc -w-rch
+#endif  // __BORLANDC__
+
     // C++ doesn't allow casting from a function pointer to any object
     // pointer.
     if (ImplicitlyConvertible<T*, const void*>::value) {
@@ -324,6 +329,10 @@
           reinterpret_cast<internal::UInt64>(p));
     }
   }
+
+#ifdef __BORLANDC__
+# pragma option pop  // Restores the warning state
+#endif  // __BORLANDC__
 }
 
 // Used to print a non-container, non-pointer value when the user
@@ -737,11 +746,14 @@
   static void TersePrintPrefixToStrings(const Tuple&, Strings*) {}
 };
 template <>
-template <typename Tuple>
-void TuplePrefixPrinter<1>::PrintPrefixTo(const Tuple& t, ::std::ostream* os) {
-  UniversalPrinter<typename ::std::tr1::tuple_element<0, Tuple>::type>::
-      Print(::std::tr1::get<0>(t), os);
-}
+struct TuplePrefixPrinter<1> {
+  template <typename Tuple>
+  static void PrintPrefixTo(const Tuple& t, ::std::ostream* os) {
+    UniversalPrinter<typename ::std::tr1::tuple_element<0, Tuple>::type>::
+        Print(::std::tr1::get<0>(t), os);
+  }
+  // TODO: Does TersePrintPrefixToStrings need to be duplicated here?
+};
 
 // Helper function for printing a tuple.  T must be instantiated with
 // a tuple type.
diff -ur gtest-1.6.0.orig//include/gtest/gtest.h gtest-1.6.0/include/gtest/gtest.h
--- gtest-1.6.0.orig//include/gtest/gtest.h	2011-02-24 13:05:24.000000000 -0500
+++ gtest-1.6.0/include/gtest/gtest.h	2011-03-01 22:58:38.000000000 -0500
@@ -1296,7 +1296,9 @@
 template <typename T1, typename T2>
 String FormatForComparisonFailureMessage(const T1& value,
                                          const T2& /* other_operand */) {
-  return PrintToString(value);
+  // C++Builder compiles this incorrectly if the namespace isn't explicitly
+  // given.
+  return ::testing::PrintToString(value);
 }
 
 // The helper function for {ASSERT|EXPECT}_EQ.
diff -ur gtest-1.6.0.orig//include/gtest/internal/gtest-internal.h gtest-1.6.0/include/gtest/internal/gtest-internal.h
--- gtest-1.6.0.orig//include/gtest/internal/gtest-internal.h	2011-02-24 13:05:24.000000000 -0500
+++ gtest-1.6.0/include/gtest/internal/gtest-internal.h	2011-02-28 23:08:02.000000000 -0500
@@ -873,6 +873,11 @@
   static const bool value =
       sizeof(Helper(ImplicitlyConvertible::MakeFrom())) == 1;
 # pragma warning(pop)           // Restores the warning state.
+#elif defined(__BORLANDC__)
+  // C++Builder cannot use member overload resolution during template
+  // instantiation.  The simplest workaround is to use its C++0x type traits
+  // functions (C++Builder 2009 and above only).
+  static const bool value = __is_convertible(From, To);
 #else
   static const bool value =
       sizeof(Helper(ImplicitlyConvertible::MakeFrom())) == 1;
diff -ur gtest-1.6.0.orig//include/gtest/internal/gtest-port.h gtest-1.6.0/include/gtest/internal/gtest-port.h
--- gtest-1.6.0.orig//include/gtest/internal/gtest-port.h	2011-02-24 13:05:24.000000000 -0500
+++ gtest-1.6.0/include/gtest/internal/gtest-port.h	2011-02-28 23:26:36.000000000 -0500
@@ -1653,10 +1653,6 @@
 //
 // Google Test uses this class in the implementation of floating-point
 // comparison.
-//
-// For now it only handles UInt (unsigned int) as that's all Google Test
-// needs.  Other types can be easily added in the future if need
-// arises.
 template <size_t size>
 class TypeWithSize {
  public:
diff -ur gtest-1.6.0.orig//include/gtest/internal/gtest-string.h gtest-1.6.0/include/gtest/internal/gtest-string.h
--- gtest-1.6.0.orig//include/gtest/internal/gtest-string.h	2011-02-24 13:05:24.000000000 -0500
+++ gtest-1.6.0/include/gtest/internal/gtest-string.h	2011-02-28 22:51:22.000000000 -0500
@@ -296,7 +296,7 @@
 
  private:
   // Constructs a non-NULL String from the given content.  This
-  // function can only be called when data_ has not been allocated.
+  // function can only be called when c_str_ has not been allocated.
   // ConstructNonNull(NULL, 0) results in an empty string ("").
   // ConstructNonNull(NULL, non_zero) is undefined behavior.
   void ConstructNonNull(const char* buffer, size_t a_length) {
Only in gtest-1.6.0/src: __history
diff -ur gtest-1.6.0.orig//src/gtest.cc gtest-1.6.0/src/gtest.cc
--- gtest-1.6.0.orig//src/gtest.cc	2011-02-24 13:05:24.000000000 -0500
+++ gtest-1.6.0/src/gtest.cc	2011-02-28 23:23:03.187000000 -0500
@@ -825,7 +825,7 @@
 //
 // Known issue: escape sequences are not handled yet.
 String String::ShowCStringQuoted(const char* c_str) {
-  return c_str ? String::Format("\"%s\"", c_str) : String("(null)");
+  return c_str ? String::Format("\"%s\"", c_str) : String("(null)");
 }
 
 // Copies at most length characters from str into a newly-allocated
@@ -4349,7 +4349,7 @@
 // Parses the environment variable var as an Int32. If it is unset,
 // returns default_val. If it is not an Int32, prints an error
 // and aborts.
-Int32 Int32FromEnvOrDie(const char* const var, Int32 default_val) {
+Int32 Int32FromEnvOrDie(const char* var, Int32 default_val) {
   const char* str_val = posix::GetEnv(var);
   if (str_val == NULL) {
     return default_val;
diff -ur gtest-1.6.0.orig//test/gtest_unittest.cc gtest-1.6.0/test/gtest_unittest.cc
--- gtest-1.6.0.orig//test/gtest_unittest.cc	2011-02-24 13:05:24.000000000 -0500
+++ gtest-1.6.0/test/gtest_unittest.cc	2011-03-01 22:57:10.929000000 -0500
@@ -1416,8 +1416,8 @@
 #define GTEST_USE_UNPROTECTED_COMMA_ global_var++, global_var++
 
 TEST_F(ExpectFatalFailureTest, AcceptsMacroThatExpandsToUnprotectedComma) {
-#if !defined(__BORLANDC__) || __BORLANDC__ >= 0x600
-  // ICE's in C++Builder 2007.
+#if !defined(__BORLANDC__)
+  // ICE's in C++Builder.
   EXPECT_FATAL_FAILURE({
     GTEST_USE_UNPROTECTED_COMMA_;
     AddFatalFailure();
@@ -3550,8 +3550,8 @@
 // Tests ASSERT_TRUE(predicate) for predicates returning AssertionResult.
 TEST(AssertionTest, AssertTrueWithAssertionResult) {
   ASSERT_TRUE(ResultIsEven(2));
-#if !defined(__BORLANDC__) || __BORLANDC__ >= 0x600
-  // ICE's in C++Builder 2007.
+#if !defined(__BORLANDC__)
+  // ICE's in C++Builder.
   EXPECT_FATAL_FAILURE(ASSERT_TRUE(ResultIsEven(3)),
                        "Value of: ResultIsEven(3)\n"
                        "  Actual: false (3 is odd)\n"
@@ -3576,8 +3576,8 @@
 // Tests ASSERT_FALSE(predicate) for predicates returning AssertionResult.
 TEST(AssertionTest, AssertFalseWithAssertionResult) {
   ASSERT_FALSE(ResultIsEven(3));
-#if !defined(__BORLANDC__) || __BORLANDC__ >= 0x600
-  // ICE's in C++Builder 2007.
+#if !defined(__BORLANDC__)
+  // ICE's in C++Builder.
   EXPECT_FATAL_FAILURE(ASSERT_FALSE(ResultIsEven(2)),
                        "Value of: ResultIsEven(2)\n"
                        "  Actual: true (2 is even)\n"
@@ -3877,10 +3877,13 @@
   ASSERT_LE(kCaseA, kCaseB);
   ASSERT_GT(kCaseB, kCaseA);
   ASSERT_GE(kCaseA, kCaseA);
+#if !defined(__BORLANDC__)
+  // ICE's in C++Builder.
   EXPECT_FATAL_FAILURE(ASSERT_EQ(kCaseA, kCaseB),
                        "Value of: kCaseB");
   EXPECT_FATAL_FAILURE(ASSERT_EQ(kCaseA, kCaseC),
                        "Actual: 42");
+#endif
   EXPECT_FATAL_FAILURE(ASSERT_EQ(kCaseA, kCaseC),
                        "Which is: -1");
 }
@@ -4791,10 +4794,13 @@
 
   // Code tested by EXPECT_FATAL_FAILURE cannot reference local
   // variables, so we have to write UnprintableChar('x') instead of x.
+#if !defined(__BORLANDC__)
+  // ICE's in C++Builder.
   EXPECT_FATAL_FAILURE(ASSERT_NE(UnprintableChar('x'), UnprintableChar('x')),
                        "1-byte object <78>");
   EXPECT_FATAL_FAILURE(ASSERT_LE(UnprintableChar('y'), UnprintableChar('x')),
                        "1-byte object <78>");
+#endif
   EXPECT_FATAL_FAILURE(ASSERT_LE(UnprintableChar('y'), UnprintableChar('x')),
                        "1-byte object <79>");
   EXPECT_FATAL_FAILURE(ASSERT_GE(UnprintableChar('x'), UnprintableChar('y')),
@@ -7213,8 +7219,10 @@
 TEST(CopyArrayTest, WorksForOneDimensionalArrays) {
   const char a[3] = "hi";
   int b[3];
+#ifndef __BORLANDC__  // C++Builder cannot compile some array size deductions.
   CopyArray(a, &b);
   EXPECT_TRUE(ArrayEq(a, b));
+#endif
 
   int c[3];
   CopyArray(a, 3, c);
@@ -7224,8 +7232,10 @@
 TEST(CopyArrayTest, WorksForTwoDimensionalArrays) {
   const int a[2][3] = { { 0, 1, 2 }, { 3, 4, 5 } };
   int b[2][3];
+#ifndef __BORLANDC__  // C++Builder cannot compile some array size deductions.
   CopyArray(a, &b);
   EXPECT_TRUE(ArrayEq(a, b));
+#endif
 
   int c[2][3];
   CopyArray(a, 2, c);
