diff --git a/src/class_linker_test.cc b/src/class_linker_test.cc
index 57abab8..5aea3aa 100644
--- a/src/class_linker_test.cc
+++ b/src/class_linker_test.cc
@@ -4,7 +4,6 @@
 #include "class_linker.h"
 #include "dex_file.h"
 #include "heap.h"
-#include "stringprintf.h"
 #include "gtest/gtest.h"
 
 namespace art {
@@ -183,7 +182,6 @@
       AssertDexFileClass(dex, descriptor);
     }
   }
-
 };
 
 TEST_F(ClassLinkerTest, FindClassNonexistent) {
@@ -386,16 +384,23 @@
 }
 
 TEST_F(ClassLinkerTest, LibCore) {
-  // TODO add host support when we have DexFile::OpenJar
-  if (!is_host_) {
-    return;
-  }
-
-  // TODO switch to jar when we have DexFile::OpenJar
-  std::string libcore_dex_file_name = StringPrintf("%s/out/target/common/obj/JAVA_LIBRARIES/core_intermediates/noproguard.classes.dex",
-                                                   getenv("ANDROID_BUILD_TOP"));
-  scoped_ptr<DexFile> libcore_dex_file(DexFile::OpenFile(libcore_dex_file_name.c_str()));
+  scoped_ptr<DexFile> libcore_dex_file(GetLibCoreDex());
+  EXPECT_TRUE(libcore_dex_file.get() != NULL); // Passes on host only until we have DexFile::OpenJar
   AssertDexFile(libcore_dex_file.get());
 }
 
+// C++ fields must exactly match the fields in the Java class. If this fails,
+// reorder the fields in the C++ class. Managed class fields are ordered by
+// ClassLinker::LinkInstanceFields.
+TEST_F(ClassLinkerTest, ValidateFieldOrderOfJavaLangString) {
+  scoped_ptr<DexFile> libcore_dex_file(GetLibCoreDex());
+  EXPECT_TRUE(libcore_dex_file.get() != NULL); // Passes on host only until we have DexFile::OpenJar
+  class_linker_->RegisterDexFile(libcore_dex_file.get());
+  Class* string = class_linker_->FindClass( "Ljava/lang/String;", NULL, libcore_dex_file.get());
+  EXPECT_EQ("value",    string->GetInstanceField(0)->GetName());
+  EXPECT_EQ("hashCode", string->GetInstanceField(1)->GetName());
+  EXPECT_EQ("offset",   string->GetInstanceField(2)->GetName());
+  EXPECT_EQ("count",    string->GetInstanceField(3)->GetName());
+}
+
 }  // namespace art
diff --git a/src/common_test.h b/src/common_test.h
index 1c4790b..a1b5f34 100644
--- a/src/common_test.h
+++ b/src/common_test.h
@@ -3,6 +3,7 @@
 #include "base64.h"
 #include "heap.h"
 #include "thread.h"
+#include "stringprintf.h"
 #include "class_linker.h"
 #include "dex_file.h"
 
@@ -185,6 +186,18 @@
     class_linker_ = runtime_->GetClassLinker();
   }
 
+  DexFile* GetLibCoreDex() {
+    // TODO add host support when we have DexFile::OpenJar
+    // TODO switch to jar when we have DexFile::OpenJar
+    if (!is_host_) {
+      return NULL;
+    }
+
+    std::string libcore_dex_file_name = StringPrintf("%s/out/target/common/obj/JAVA_LIBRARIES/core_intermediates/noproguard.classes.dex",
+                                                     getenv("ANDROID_BUILD_TOP"));
+    return DexFile::OpenFile(libcore_dex_file_name.c_str());
+  }
+
   bool is_host_;
   scoped_ptr<DexFile> java_lang_dex_file_;
   scoped_ptr<Runtime> runtime_;
diff --git a/src/object.h b/src/object.h
index 0abf444..05071cc 100644
--- a/src/object.h
+++ b/src/object.h
@@ -1043,6 +1043,7 @@
   }
 
  public: // TODO: private
+  // Field order required by test "ValidateFieldOrderOfJavaLangString".
   CharArray* array_;
 
   uint32_t hash_code_;
