]> git.lizzy.rs Git - rust.git/commit
[debuginfo] Make debuginfo type names for slices and str consistent.
authorMichael Woerister <michaelwoerister@posteo>
Tue, 25 Oct 2022 10:28:03 +0000 (12:28 +0200)
committerMichael Woerister <michaelwoerister@posteo>
Mon, 31 Oct 2022 14:43:44 +0000 (15:43 +0100)
commit0cd2dd7263a20ba62591039cd3591c8eaef13878
tree7a9b322b39dc101763de59789b716dd70cd9c88b
parent1481fd964bac3c750c7e1b21206fdaa60346c456
[debuginfo] Make debuginfo type names for slices and str consistent.

Before this PR, the compiler would emit the debuginfo name `slice$<T>`
for all kinds of slices, regardless of whether they are behind a
reference or not and regardless of the kind of reference. As a
consequence, the types `Foo<&[T]>`, `Foo<[T]>`, and `Foo<&mut [T]>`
would end up with the same type name `Foo<slice$<T> >` in debuginfo,
making it impossible to disambiguate between them by name. Similarly,
`&str` would get the name `str` in debuginfo, so the debuginfo name for
`Foo<str>` and `Foo<&str>` would be the same. In contrast,
`*const [bool]` and `*mut [bool]` would be `ptr_const$<slice$<bool> >`
and `ptr_mut$<slice$<bool> >`, i.e. the encoding does not lose
information about the type.

This PR removes all special handling for slices and `str`. The types
`&[bool]`, `&mut [bool]`, and `&str` thus get the names
`ref$<slice2$<bool> >`, `ref_mut$<slice2$<bool> >`, and
`ref$<str$>` respectively -- as one would expect.
compiler/rustc_codegen_ssa/src/debuginfo/type_names.rs
src/etc/natvis/intrinsic.natvis
src/etc/natvis/liballoc.natvis
src/test/debuginfo/basic-types.rs
src/test/debuginfo/msvc-pretty-enums.rs
src/test/debuginfo/msvc-scalarpair-params.rs
src/test/debuginfo/pretty-std.rs
src/test/debuginfo/rc_arc.rs
src/test/debuginfo/result-types.rs
src/test/debuginfo/type-names.rs
src/test/debuginfo/unsized.rs