<div dir="ltr">I was going through doing some routine StringRef changes and I ran across this function:<div><br></div><div><div>  std::lock_guard<std::recursive_mutex> guard(m_mutex);</div><div>  assert(GetStackID() ==</div><div>         prev_frame.GetStackID()); // TODO: remove this after some testing</div><div>  m_variable_list_sp = prev_frame.m_variable_list_sp;</div><div>  m_variable_list_value_objects.Swap(prev_frame.m_variable_list_value_objects);</div><div>  if (!m_disassembly.GetString().empty()) {</div><div>    m_disassembly.Clear();</div><div><b>    m_disassembly.GetString().swap(m_disassembly.GetString());</b></div><div>  }</div></div><div><br></div><div>Either I'm crazy or that bolded line is a bug.  Is it supposed to be prev_frame.m_disassembly.GetString()?</div><div><br></div><div>What would the implications of this bug be?  i.e. how can we write a test for this?</div><div><br></div><div>Also, as a matter of curiosity, why is it swapping?  That means it's modifying the input frame, when it seems like it really should just be modifying the current frame.</div></div>