Test gdb pretty printing more and fix overzealous type substitution
Adresses a problem concerning printing BTreeMap / BTreeSet data in gdb: when the key or value type name contains substring "LeafNode", and the map has multiple nodes (e.g. more than 11 elements), printing causes an exception. E.g.
```
rustc -g - <<EOF
use std::collections::BTreeMap;
struct MyLeafNode(i8);
fn main() {
let m: BTreeMap<i8, MyLeafNode> = (0..12).map(|i| (i, MyLeafNode(i))).collect();
assert!(!m.is_empty());
}
EOF
```
```
$ rust-gdb rust_out
(gdb) b 7
(gdb) r
(gdb) p m
$1 = BTreeMap<i8, rust_out::MyLeafNode>(len: 12)Python Exception <class 'gdb.error'> No type named alloc::collections::btree::node::InternalNode<i8, rust_out::MyInternalNode>.:
use std::collections::BTreeMap;
```
The code was written in #56144 by @tromey (and later touched upon by @RalfJung in #57045, but I think that had nothing to do with the issues in this PR).
LLVM seems to at least sometimes optimize better when the length comes directly
from the `len()` of the array vs. an equivalent integer.
Also, this allows easier copy/pasting of the function into compiler explorer for
experimentation.
Rollup of 10 pull requests
Successful merges:
- #70003 (symbol_names: treat ReifyShim like VtableShim.)
- #70051 (Allow `hir().find` to return `None`)
- #70126 (Fix ICE caused by truncating a negative ZST enum discriminant)
- #70197 (For issue 53957: revise unit test to focus on underlying bug of 23076.)
- #70215 (ast: Compress `AttrId` from `usize` to `u32`)
- #70218 (Fix deprecated Error.description() usage in docs)
- #70228 (Remove CARGO_BUILD_TARGET from bootstrap.py)
- #70231 (Add explanation message for E0224)
- #70232 (Tweak wording for std::io::Read::read function)
- #70238 (Add a test for out-of-line module passed through a proc macro)
Failed merges:
r? @ghost
ast: Compress `AttrId` from `usize` to `u32`
An easy size win for `ast::Attribute` (96 bytes -> 88 bytes).
Also stop encoding/decoding `AttrId` entirely.
For issue 53957: revise unit test to focus on underlying bug of 23076.
Fix#53957 by revising unit test to focus on underlying bug of #23076.
Namely, this version focuses on the end-to-end behavior that the attempt to create the UDP binding will fail, regardless of the semantics of how particular DNS servers handle junk inputs.
(I spent some time trying to create a second more-focused test that would sidestep the DNS resolution, but this is not possible without more invasive changes to the internal infrastructure of `ToSocketAddrs` and what not. It is not worth it.)
symbol_names: treat ReifyShim like VtableShim.
Without this, the `#[track_caller]` tests don't pass with `-Zsymbol-mangling-version=v0`, because there is a symbol name collision between the `ReifyShim` and the original definition.
cc @anp
We find that it is common for large ranges of chars to be false -- and that
means that it is plausibly common for us to ask about a word that is entirely
empty. Therefore, we should make sure that we do not need to rotate bits or
otherwise perform some operation to map to the zero word; canonicalize it first
if possible.