message: Fix std unique pointer pretty-printer for new stl versions
  Summary: The unique pointer layout was changed in libstdc++ 6.0.23.
  Reviewers: labath, clayborg
  Subscribers: luporl, lbianc, lldb-commits
  Patch by Alexandre Yukio Yamashita
diff: @@ -43,6 +43,8 @@ private:
  ValueObjectSP m_ptr_obj;
  ValueObjectSP m_obj_obj;
  ValueObjectSP m_del_obj;
  +
  + ValueObjectSP GetTuple();
  };
  } // end of anonymous namespace
  @@ -53,17 +55,34 @@ LibStdcppUniquePtrSyntheticFrontEnd::LibStdcppUniquePtrSyntheticFrontEnd(
  Update();
  }
  -bool LibStdcppUniquePtrSyntheticFrontEnd::Update() {
  +ValueObjectSP LibStdcppUniquePtrSyntheticFrontEnd::GetTuple() {
  ValueObjectSP valobj_backend_sp = m_backend.GetSP();
  +
  if (!valobj_backend_sp)
  - return false;
  + return nullptr;
  ValueObjectSP valobj_sp = valobj_backend_sp->GetNonSyntheticValue();
  if (!valobj_sp)
  - return false;
  + return nullptr;
  - ValueObjectSP tuple_sp =
  + ValueObjectSP obj_child_sp =
  valobj_sp->GetChildMemberWithName(ConstString("_M_t"), true);
  +
  + ValueObjectSP obj_subchild_sp =
  + obj_child_sp->GetChildMemberWithName(ConstString("_M_t"), true);
  +
  + // if there is a _M_t subchild, the tuple is found in
  + // the obj_subchild_sp (for libstdc++ 6.0.23).
  + if (obj_subchild_sp) {
  + return obj_subchild_sp;
  + }
  +
  + return obj_child_sp;
  +}
  +
  +bool LibStdcppUniquePtrSyntheticFrontEnd::Update() {
  + ValueObjectSP tuple_sp = GetTuple();
  +
  if (!tuple_sp)
  return false;
  