Improve logging for missed fields
Pretty print fields that are not assigned to an offset.
Bug: 168097035
Test: make
Change-Id: Ia389165d5a560cf69f396dbef7e98972b1da5e90
diff --git a/runtime/class_linker.cc b/runtime/class_linker.cc
index c181c22..bf32f3e 100644
--- a/runtime/class_linker.cc
+++ b/runtime/class_linker.cc
@@ -8552,8 +8552,14 @@
ShuffleForward<4>(¤t_field, &field_offset, &grouped_and_sorted_fields, &gaps);
ShuffleForward<2>(¤t_field, &field_offset, &grouped_and_sorted_fields, &gaps);
ShuffleForward<1>(¤t_field, &field_offset, &grouped_and_sorted_fields, &gaps);
- CHECK(grouped_and_sorted_fields.empty()) << "Missed " << grouped_and_sorted_fields.size() <<
- " fields.";
+ if (!grouped_and_sorted_fields.empty()) {
+ std::ostringstream oss;
+ oss << "Missed " << grouped_and_sorted_fields.size() << " fields ";
+ for (ArtField* field : grouped_and_sorted_fields) {
+ oss << field->PrettyField() << " ";
+ }
+ LOG(FATAL) << oss.str();
+ }
self->EndAssertNoThreadSuspension(old_no_suspend_cause);
// We lie to the GC about the java.lang.ref.Reference.referent field, so it doesn't scan it.