rust/tests/ui/hygiene
bors cca3373706 Auto merge of #113113 - Amanieu:box-vec-zst, r=Mark-Simulacrum
Eliminate ZST allocations in `Box` and `Vec`

This PR fixes 2 issues with `Box` and `RawVec` related to ZST allocations. Specifically, the `Allocator` trait requires that:
- If you allocate a zero-sized layout then you must later deallocate it, otherwise the allocator may leak memory.
- You cannot pass a ZST pointer to the allocator that you haven't previously allocated.

These restrictions exist because an allocator implementation is allowed to allocate non-zero amounts of memory for a zero-sized allocation. For example, `malloc` in libc does this.

Currently, ZSTs are handled differently in `Box` and `Vec`:
- `Vec` never allocates when `T` is a ZST or if the vector capacity is 0.
- `Box` just blindly passes everything on to the allocator, including ZSTs.

This causes problems due to the free conversions between `Box<[T]>` and `Vec<T>`, specifically that ZST allocations could get leaked or a dangling pointer could be passed to `deallocate`.

This PR fixes this by changing `Box` to not allocate for zero-sized values and slices. It also fixes a bug in `RawVec::shrink` where shrinking to a size of zero did not actually free the backing memory.
2023-07-14 01:59:08 +00:00
..
auxiliary remove invalid ignore-pretty 2023-04-03 09:24:11 +02:00
arguments.rs remove invalid ignore-pretty 2023-04-03 09:24:11 +02:00
arguments.stderr remove invalid ignore-pretty 2023-04-03 09:24:11 +02:00
assoc_item_ctxt.rs remove invalid ignore-pretty 2023-04-03 09:24:11 +02:00
assoc_item_ctxt.stderr remove invalid ignore-pretty 2023-04-03 09:24:11 +02:00
assoc_ty_bindings.rs remove invalid ignore-pretty 2023-04-03 09:24:11 +02:00
cross-crate-codegen-attrs.rs
cross-crate-define-and-use.rs
cross-crate-fields.rs
cross-crate-glob-hygiene.rs
cross-crate-glob-hygiene.stderr
cross-crate-methods.rs
cross-crate-name-collision.rs
cross-crate-name-hiding-2.rs
cross-crate-name-hiding-2.stderr
cross-crate-name-hiding.rs
cross-crate-name-hiding.stderr
cross-crate-redefine.rs
cross-crate-redefine.stderr
cross-crate-variants.rs
dollar-crate-modern.rs
duplicate_lifetimes.rs
duplicate_lifetimes.stderr
eager-from-opaque-2.rs
eager-from-opaque.rs
expansion-info-reset.rs
expansion-info-reset.stderr
extern-prelude-from-opaque-fail-2018.rs Add filter with next segment while lookup typo for path 2023-07-07 09:00:50 +08:00
extern-prelude-from-opaque-fail-2018.stderr adjust smart_resolve_partial_mod_path_errors 2023-07-07 10:19:30 +08:00
extern-prelude-from-opaque-fail.rs Add filter with next segment while lookup typo for path 2023-07-07 09:00:50 +08:00
extern-prelude-from-opaque-fail.stderr adjust smart_resolve_partial_mod_path_errors 2023-07-07 10:19:30 +08:00
fields-definition.rs
fields-definition.stderr
fields-move.rs
fields-move.stderr
fields-numeric-borrowck.rs
fields-numeric-borrowck.stderr Do not set up wrong span for adjustments 2023-07-10 20:09:26 +00:00
fields.rs remove invalid ignore-pretty 2023-04-03 09:24:11 +02:00
fields.stderr remove invalid ignore-pretty 2023-04-03 09:24:11 +02:00
for-loop.rs
for-loop.stderr
format-args.rs
generate-mod.rs
generate-mod.stderr
generic_params.rs remove invalid ignore-pretty 2023-04-03 09:24:11 +02:00
globs.rs
globs.stderr Special-case item attributes in the suggestion output 2023-04-12 22:50:10 +00:00
hir-res-hygiene.rs
hygiene-dodging-1.rs
hygiene.rs
hygienic-label-1.rs
hygienic-label-1.stderr
hygienic-label-2.rs
hygienic-label-2.stderr
hygienic-label-3.rs
hygienic-label-3.stderr
hygienic-label-4.rs
hygienic-label-4.stderr
hygienic-labels-in-let.rs
hygienic-labels.rs
impl_items-2.rs
impl_items-2.stderr
impl_items.rs remove invalid ignore-pretty 2023-04-03 09:24:11 +02:00
impl_items.stderr remove invalid ignore-pretty 2023-04-03 09:24:11 +02:00
intercrate.rs remove invalid ignore-pretty 2023-04-03 09:24:11 +02:00
intercrate.stderr remove invalid ignore-pretty 2023-04-03 09:24:11 +02:00
issue-15221.rs
issue-32922.rs
issue-40847.rs
issue-44128.rs
issue-47311.rs remove invalid ignore-pretty 2023-04-03 09:24:11 +02:00
issue-47312.rs remove invalid ignore-pretty 2023-04-03 09:24:11 +02:00
issue-61574-const-parameters.rs
issue-77523-def-site-async-await.rs
items.rs remove invalid ignore-pretty 2023-04-03 09:24:11 +02:00
lambda-var-hygiene.rs
legacy_interaction.rs remove invalid ignore-pretty 2023-04-03 09:24:11 +02:00
lexical.rs remove invalid ignore-pretty 2023-04-03 09:24:11 +02:00
local_inner_macros.rs
macro-metavars-legacy.rs
macro-metavars-transparent.rs
missing-self-diag.rs
missing-self-diag.stderr
nested_macro_privacy.rs
nested_macro_privacy.stderr
nested-dollar-crate.rs
no_implicit_prelude-2018.rs
no_implicit_prelude-2018.stderr Make "consider importing" consistent for macros 2023-06-10 00:06:34 +08:00
no_implicit_prelude-2021.rs
no_implicit_prelude.rs
no_implicit_prelude.stderr Special-case item attributes in the suggestion output 2023-04-12 22:50:10 +00:00
panic-location.rs
panic-location.run.stderr Eliminate ZST allocations in Box and Vec 2023-07-13 15:00:53 +01:00
pattern-macro.rs
pattern-macro.stderr
prelude-import-hygiene.rs
privacy-early.rs
privacy-early.stderr
privacy.rs
privacy.stderr
rustc-macro-transparency.rs
rustc-macro-transparency.stderr
specialization.rs remove invalid ignore-pretty 2023-04-03 09:24:11 +02:00
stdlib-prelude-from-opaque-early.rs
stdlib-prelude-from-opaque-late.rs Rename drop_copy lint to dropping_copy_types 2023-05-21 13:37:32 +02:00
thread-local-not-in-prelude.rs
trait_items-2.rs remove invalid ignore-pretty 2023-04-03 09:24:11 +02:00
trait_items.rs
trait_items.stderr Special-case item attributes in the suggestion output 2023-04-12 22:50:10 +00:00
traits-in-scope.rs
transparent-basic.rs
unpretty-debug.rs
unpretty-debug.stdout
wrap_unhygienic_example.rs remove invalid ignore-pretty 2023-04-03 09:24:11 +02:00
xcrate.rs remove invalid ignore-pretty 2023-04-03 09:24:11 +02:00