================
@@ -6754,12 +6754,12 @@ size_t TypeSystemClang::GetIndexOfChildMemberWithName(
           llvm::StringRef field_name = field->getName();
           if (field_name.empty()) {
             CompilerType field_type = GetType(field->getType());
+            std::vector<uint32_t> save_indices = child_indexes;
----------------
cmtice wrote:

Whether or not we return an Expected, the only way to make this code work 
(without major changes) is to save the vector before the recursive call and 
restore it in the case where the recursive call fails (and, with Expected, 
returns an llvm:Error).  If the recursive call is successful, we immediately 
return the  size of the vector (which was updated to contain the right values). 
But if the recursive call fails, then the code continues execution, looking for 
alternate paths, and assumes that the vector is in the same state it was before 
the recursive call was made.  Since the recursive call can update the vector 
before failing (and returning the error if we're using Expected), unless we 
restore it after the failure (and also consume the error), the following 
calculations may return an incorrect result (I saw this happen when I was 
testing your suggestion).

I would really prefer to NOT try to refactor and fix this entire function 
myself, so if you will accept my fix (once I fix the test case as requested) I 
would really appreciate it.

https://github.com/llvm/llvm-project/pull/117808
_______________________________________________
lldb-commits mailing list
lldb-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits

Reply via email to