Rollup merge of #161726 - Walnut356:pdb_tuple_fields, r=Kobzol
Fix debugger visualizer tuple child ordering w/ PDB debug info
see: https://github.com/llvm/llvm-project/issues/218613 for an explanation of the issue. tl;dr, PDB fields reflect rustc's reordering, whereas DWARF fields are in source-code-order. This causes issues with `GetChildAtIndex` in cases where both DWARF- and PDB-based types can interact with them.
This PR uses field names to retrieve field indexes, rather than blindly indexing into the field array.
I did a quick scan over the rest of the `GetChildAtIndex` calls, and they all fall under a few safe cases
1. in DWARF or PDB specific providers (mainly enum discriminants, which can't be reordered anyway)
2. used to get field `0` of a struct with only 1 field
3. in the summary provider where we're typically already interacting with the synthetic value and synthetic children anyway
cc https://github.com/rust-lang/rust/issues/161657, fixes `tests/debuginfo/tuple-struct.rs` on `windows-msvc`
<details><summary>`windows-msvc` `tests/debuginfo` results with this change</summary>
```
failures:
[debuginfo-lldb] tests\debuginfo\associated-types.rs
[debuginfo-lldb] tests\debuginfo\borrowed-basic.rs
[debuginfo-lldb] tests\debuginfo\borrowed-unique-basic.rs
[debuginfo-lldb] tests\debuginfo\basic-types-globals.rs#no-lto
[debuginfo-lldb] tests\debuginfo\borrowed-tuple.rs
[debuginfo-lldb] tests\debuginfo\boxed-struct.rs
[debuginfo-lldb] tests\debuginfo\captured-fields-2.rs
[debuginfo-lldb] tests\debuginfo\cross-crate-spans.rs
[debuginfo-lldb] tests\debuginfo\coroutine-locals.rs
[debuginfo-lldb] tests\debuginfo\box.rs
[debuginfo-lldb] tests\debuginfo\captured-fields-1.rs
[debuginfo-lldb] tests\debuginfo\c-style-enum-in-composite.rs
[debuginfo-lldb] tests\debuginfo\by-value-self-argument-in-trait-impl.rs
[debuginfo-lldb] tests\debuginfo\destructured-for-loop-variable.rs
[debuginfo-lldb] tests\debuginfo\dummy_span.rs
[debuginfo-lldb] tests\debuginfo\evec-in-struct.rs
[debuginfo-lldb] tests\debuginfo\destructured-fn-argument.rs
[debuginfo-lldb] tests\debuginfo\destructured-local.rs
[debuginfo-lldb] tests\debuginfo\generic-struct.rs
[debuginfo-lldb] tests\debuginfo\issue-22656.rs
[debuginfo-lldb] tests\debuginfo\basic-types-globals.rs#lto
[debuginfo-lldb] tests\debuginfo\lexical-scope-in-if.rs
[debuginfo-lldb] tests\debuginfo\lexical-scope-in-stack-closure.rs
[debuginfo-lldb] tests\debuginfo\lexical-scope-in-unconditional-loop.rs
[debuginfo-lldb] tests\debuginfo\lexical-scope-with-macro.rs
[debuginfo-lldb] tests\debuginfo\lexical-scope-in-unique-closure.rs
[debuginfo-lldb] tests\debuginfo\lexical-scope-in-if-let.rs
[debuginfo-lldb] tests\debuginfo\lexical-scopes-in-block-expression.rs
[debuginfo-lldb] tests\debuginfo\method-on-generic-struct.rs
[debuginfo-lldb] tests\debuginfo\lexical-scope-in-while.rs
[debuginfo-lldb] tests\debuginfo\lexical-scope-in-for-loop.rs
[debuginfo-lldb] tests\debuginfo\name-shadowing-and-scope-nesting.rs
[debuginfo-lldb] tests\debuginfo\no_mangle-info.rs
[debuginfo-lldb] tests\debuginfo\packed-struct-with-destructor.rs
[debuginfo-lldb] tests\debuginfo\pretty-slices.rs
[debuginfo-lldb] tests\debuginfo\packed-struct.rs
[debuginfo-lldb] tests\debuginfo\reference-debuginfo.rs
[debuginfo-lldb] tests\debuginfo\simple-struct.rs
[debuginfo-lldb] tests\debuginfo\simple-lexical-scope.rs
[debuginfo-lldb] tests\debuginfo\shadowed-variable.rs
[debuginfo-lldb] tests\debuginfo\simple-tuple.rs
[debuginfo-lldb] tests\debuginfo\shadowed-argument.rs
[debuginfo-lldb] tests\debuginfo\struct-with-destructor.rs
[debuginfo-lldb] tests\debuginfo\strings-and-strs.rs
[debuginfo-lldb] tests\debuginfo\struct-in-struct.rs
[debuginfo-lldb] tests\debuginfo\pretty-std-collections.rs
[debuginfo-lldb] tests\debuginfo\tuple-in-tuple.rs
[debuginfo-lldb] tests\debuginfo\thread-names.rs#win
[debuginfo-lldb] tests\debuginfo\vec-slices.rs
[debuginfo-lldb] tests\debuginfo\var-captured-in-sendable-closure.rs
[debuginfo-lldb] tests\debuginfo\var-captured-in-stack-closure.rs
[debuginfo-lldb] tests\debuginfo\var-captured-in-nested-closure.rs
test result: FAILED. 244 passed; 52 failed; 223 ignored; 0 measured; 0 filtered out; finished in 13.22s
```
</details> J
Jonathan Brouwer committed
70020cc60fdf32e67cbfc5818da8e3c7e34a1918
Committed by GitHub <noreply@github.com>
on 8/25/2026, 4:00:03 PM