643 Commits

Author SHA1 Message Date
bors
8a2dec6e58 Auto merge of #53804 - RalfJung:ptr-invalid, r=nagisa
fix some uses of pointer intrinsics with invalid pointers

[Found by miri](https://github.com/solson/miri/pull/446):

* `Vec::into_iter` calls `ptr::read` (and the underlying `copy_nonoverlapping`) with an unaligned pointer to a ZST. [According to LLVM devs](https://bugs.llvm.org/show_bug.cgi?id=38583), this is UB because it contradicts the metadata we are attaching to that pointer.
* `HashMap` creation calls `ptr:.write_bytes` on a NULL pointer with a count of 0. This is likely not currently UB *currently*, but it violates the rules we are setting in https://github.com/rust-lang/rust/pull/53783, and we might want to exploit those rules later (e.g. with more `nonnull` attributes for LLVM).

    Probably what `HashMap` really should do is use `NonNull::dangling()` instead of 0 for the empty case, but that would require a more careful analysis of the code.

It seems like ideally, we should do a review of usage of such intrinsics all over libstd to ensure that they use valid pointers even when the size is 0. Is it worth opening an issue for that?
2018-09-16 18:03:39 +00:00
Jonathan Behrens
e9583628b2
Eliminate unused variable warning 2018-09-13 16:48:09 -04:00
Jonathan Behrens
1ad0919fa9
Remove println!() statement from HashMap unit test 2018-09-13 14:58:13 -04:00
Val
abe0f027ae
fix typos in growth algo description
modified to read "the first table overflows into the second, and the second into the first." plus smaller typos
2018-09-10 09:02:16 -07:00
Guillaume Gomez
c1ad1b0338 Fix invalid urls 2018-09-06 23:32:30 +02:00
Ralf Jung
61f0a2b3fd fix some uses of pointer intrinsics with invalid pointers 2018-08-29 23:08:47 +02:00
Corey Farwell
993fb93464 Replace usages of ptr::offset with ptr::{add,sub}. 2018-08-20 07:28:34 -04:00
Simon Sapin
b0547cea0a Move core::alloc::CollectionAllocErr to alloc::collections 2018-06-29 14:01:33 +02:00
Simon Sapin
121b57b87a Move some alloc crate top-level items to a new alloc::collections module
This matches std::collections
2018-06-29 14:01:33 +02:00
bors
d692ab406e Auto merge of #51543 - SimonSapin:oom, r=SimonSapin
Rename OOM to allocation error

The acronym is not descriptive unless one has seen it before.

* Rename the `oom` function to `handle_alloc_error`. It was **stabilized in 1.28**, so if we do this at all we need to land it this cycle.
* Rename `set_oom_hook` to `set_alloc_error_hook`
* Rename `take_oom_hook` to `take_alloc_error_hook`

Bikeshed: `on` v.s. `for`, `alloc` v.s. `allocator`, `error` v.s. `failure`
2018-06-19 19:22:12 +00:00
Simon Sapin
2b789bd057 Rename OOM to allocation error
The acronym is not descriptive unless one has seen it before.

* Rename the `oom` function to `handle_alloc_error`. It was **stabilized in 1.28**, so if we do this at all we need to land it this cycle.
* Rename `set_oom_hook` to `set_alloc_error_hook`
* Rename `take_oom_hook` to `take_alloc_error_hook`

Bikeshed: `alloc` v.s. `allocator`, `error` v.s. `failure`
2018-06-18 21:41:24 +02:00
Kornel
01e82f111e Prefer use of owned values in examples 2018-06-18 12:38:46 +01:00
Simon Sapin
8c30c51686 Remove deprecated heap modules
The heap.rs file was already unused.
2018-06-11 13:47:27 -07:00
Mike Hommey
f6ab74b8e7 Remove alloc::Opaque and use *mut u8 as pointer type for GlobalAlloc 2018-06-11 13:47:23 -07:00
Guillaume Gomez
861c7cb9fd Stabilize entry-or-default 2018-06-10 12:59:12 +02:00
Amanieu d'Antras
b69724f37c Optimize layout calculations in HashMap
This now produces the same assembly code as the previous implementation.
2018-06-04 16:00:08 +01:00
Corey Farwell
a86f556ee3 Add a couple lines describing differences between into_mut/get_mut. 2018-06-02 18:07:23 -04:00
Phlosioneer
ed1a8fff62 Fixed typo 2018-06-02 15:51:44 -04:00
Phlosioneer
1bc6c4b10e Clarify the difference between get_mut and into_mut for OccupiedEntry
The examples for both hash_map::OccupiedEntry::get_mut and
hash_map::OccupiedEntry::into_mut were almost identical. This led
to some confusion over the difference, namely why you would ever
use get_mut when into_mut gives alonger lifetime. Reddit thread:
https://www.reddit.com/r/rust/comments/8a5swr/why_does_hashmaps

This commit adds two lines and a comment to the example, to show
that the entry object can be re-used after calling get_mut.
2018-06-02 15:51:39 -04:00
Amanieu d'Antras
c6bebf4554 Simplify HashMap layout calculation by using Layout 2018-06-01 17:24:03 +01:00
Mike Hommey
0f4ef003ac Pass a Layout to oom
As discussed in
https://github.com/rust-lang/rust/issues/49668#issuecomment-384893456
and subsequent, there are use-cases where the OOM handler needs to know
the size of the allocation that failed. The alignment might also be a
cause for allocation failure, so providing it as well can be useful.
2018-05-30 05:35:48 +09:00
Cory Sherman
f7c4a33f32 remove collections::range::RangeArgument
was already moved to ops::RangeBounds (see #30877)
2018-05-24 05:01:40 -07:00
kennytm
b239293895
Rollup merge of #50316 - ehuss:fix-doc-links, r=frewsxcv
Fix some broken links in docs.
2018-05-01 01:18:38 +08:00
Eric Huss
269d279094 Fix some broken links in docs. 2018-04-29 10:15:40 -07:00
Alex Crichton
c1bb1caa11 std: Inline DefaultResizePolicy::new
This should allow us to tighten up the [codegen][example] a bit more, avoiding a
function call across object boundaries in the default optimized case.

[example]: https://play.rust-lang.org/?gist=c1179088b0f8a4dcd93a9906463f993d&version=stable&mode=release
2018-04-28 14:14:21 -07:00
Steven Fackler
e513c1bd31 Replace GlobalAlloc::oom with a lang item 2018-04-22 10:08:17 -07:00
bors
a10bb6b592 Auto merge of #50088 - alexcrichton:std-tweaks, r=sfackler
Tweak some stabilizations in libstd

This commit tweaks a few stable APIs in the `beta` branch before they hit
stable. The `str::is_whitespace` and `str::is_alphanumeric` functions were
deleted (added in #49381, issue at #49657). The `and_modify` APIs added
in #44734 were altered to take a `FnOnce` closure rather than a `FnMut` closure.

Closes #49581
Closes #49657
2018-04-20 20:40:59 +00:00
Alex Crichton
ca79ba300a Tweak some stabilizations in libstd
This commit tweaks a few stable APIs in the `beta` branch before they hit
stable. The `str::is_whitespace` and `str::is_alphanumeric` functions were
deleted (added in #49381, issue at #49657). The `and_modify` APIs added
in #44734 were altered to take a `FnOnce` closure rather than a `FnMut` closure.

Closes #49581
Closes #49657
2018-04-19 16:53:12 -07:00
tinaun
fd042eee00 stabilize hash_map_remove_entry feature 2018-04-17 01:22:28 -04:00
bors
1ef1563518 Auto merge of #48945 - clarcharr:iter_exhaust, r=Kimundi
Replace manual iterator exhaust with for_each(drop)

This originally added a dedicated method, `Iterator::exhaust`, and has since been replaced with `for_each(drop)`, which is more idiomatic.

<del>This is just shorthand for `for _ in &mut self {}` or `while let Some(_) = self.next() {}`. This states the intent a lot more clearly than the identical code: run the iterator to completion.

<del>At least personally, my eyes tend to gloss over `for _ in &mut self {}` without fully paying attention to what it does; having a `Drop` implementation akin to:

<del>`for _ in &mut self {}; unsafe { free(self.ptr); }`</del>

<del>Is not as clear as:

<del>`self.exhaust(); unsafe { free(self.ptr); }`

<del>Additionally, I've seen debate over whether `while let Some(_) = self.next() {}` or `for _ in &mut self {}` is more clear, whereas `self.exhaust()` is clearer than both.
2018-04-16 13:21:56 +00:00
Simon Sapin
f607a3872a Rename alloc::Void to alloc::Opaque 2018-04-12 22:53:22 +02:00
Mike Hommey
fddf51ee0b Use NonNull<Void> instead of *mut u8 in the Alloc trait
Fixes #49608
2018-04-12 22:53:22 +02:00
Simon Sapin
b017742136 Return Result instead of Option in alloc::Layout constructors 2018-04-12 22:53:13 +02:00
Simon Sapin
93a9ad4897 Remove the now-unit-struct AllocErr field inside CollectionAllocErr 2018-04-12 22:53:13 +02:00
Simon Sapin
157ff8cd05 Remove the now-unit-struct AllocErr parameter of oom() 2018-04-12 22:53:13 +02:00
Simon Sapin
e521b8b472 Actually deprecate the Heap type 2018-04-12 22:52:47 +02:00
Simon Sapin
1b895d8b88 Import the alloc crate as alloc_crate in std
… to make the name `alloc` available.
2018-04-12 22:52:47 +02:00
Clar Charr
5c58eec0bd Replace manual iter exhaust with for_each(drop). 2018-04-04 19:10:38 -04:00
Aidan Hobson Sayers
9b5859aea1 Remove all unstable placement features
Closes #22181, #27779
2018-04-03 11:02:34 +02:00
Mike Hommey
b647583c2d Use Alloc and Layout from core::heap.
94d1970bba87f2d2893f6e934e4c3f02ed50604d moved the alloc::allocator
module to core::heap, moving e.g. Alloc and Layout out of the alloc
crate. While alloc::heap reexports them, it's better to use them from
where they really come from.
2018-04-02 16:06:19 +09:00
Simon Sapin
3542ff8e39 Hide the Bound type in docs at its deprecated location in std::collections 2018-03-29 13:12:50 +02:00
Simon Sapin
6960a960f1 Hide the deprecated std::collections::range module from docs 2018-03-29 13:12:50 +02:00
Simon Sapin
16d3ba1b23 Move RangeArguments to {core::std}::ops and rename to RangeBounds
These unstable items are deprecated:

* The `std::collections::range::RangeArgument` reexport
* The `std::collections::range` module.
2018-03-29 13:12:49 +02:00
Simon Sapin
c3a63970de Move alloc::Bound to {core,std}::ops
The stable reexport `std::collections::Bound` is now deprecated.

Another deprecated reexport could be added in `alloc`,
but that crate is unstable.
2018-03-29 13:12:49 +02:00
kennytm
010fb40b44
Rollup merge of #49400 - Diggsey:shrink-to, r=joshtriplett
Implement `shrink_to` method on collections

Fixes #49385
2018-03-28 17:55:09 +02:00
Diggory Blake
04f6692aaf Implement shrink_to method on collections 2018-03-27 01:39:11 +01:00
Diggory Blake
fbec3ec5a7 Implement get_key_value for HashMap, BTreeMap 2018-03-25 23:50:47 +01:00
snf
9e64946bde setting ABORTING_MALLOC for asmjs backend 2018-03-15 17:43:05 +00:00
snf
b08b5ae0ec try_reserve: disabling tests for asmjs, blocked by #48968 2018-03-14 03:48:42 -07:00
snf
92bfcd2b19 implementing fallible allocation API (try_reserve) for Vec, String and HashMap 2018-03-14 03:48:42 -07:00