Commit Graph

62 Commits

Author SHA1 Message Date
kennytm 0dd88c9797 Rollup merge of #53329 - frewsxcv:frewsxcv-ptr-add-sub, r=RalfJung
Replace usages of ptr::offset with ptr::{add,sub}.

Rust provides these helper methods – so let's use them!
2018-08-21 22:05:30 +08:00
Corey Farwell 993fb93464 Replace usages of ptr::offset with ptr::{add,sub}. 2018-08-20 07:28:34 -04:00
Matthias Krüger 71120ef1e5 Fix typos found by codespell. 2018-08-19 17:41:28 +02:00
Simon Sapin b0547cea0a Move core::alloc::CollectionAllocErr to alloc::collections 2018-06-29 14:01:33 +02:00
Simon Sapin 1acbb0a935 Make raw_vec perma-unstable and hidden 2018-06-29 14:01:33 +02: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
Simon Sapin 0081d8826b Remove some unneeded casts 2018-06-11 13:47:28 -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
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
Mike Hommey 9c4e5b3b6c Restore RawVec::reserve* documentation
When the RawVec::try_reserve* methods were added, they took the place of
the ::reserve* methods in the source file, and new ::reserve* methods
wrapping the new try_reserve* methods were created. But the
documentation didn't move along, such that:
 - reserve_* methods are barely documented.
 - try_reserve_* methods have unmodified documentation from reserve_*,
   such that their documentation indicate they are panicking/aborting.

This moves the documentation back to the right methods, with a
placeholder documentation for the try_reserve* methods.
2018-05-10 09:16:12 +09:00
Mike Hommey 663c0961b9 Cleanup a use in a raw_vec test
`allocator` is deprecated in favor of `alloc`, and `Alloc` is already imported
through `super::*`.
2018-05-08 17:07:24 +09:00
Mark Mansi f9f992379d heh, logic is hard 2018-04-29 17:27:17 -05:00
Mark Mansi e5280e452f use const trick 2018-04-29 17:13:49 -05:00
Mark Mansi a2105b8e21 make RawVec::empty const 2018-04-25 16:42:57 -05:00
Mark Mansi 256096da9e Make Vec::new const 2018-04-25 16:33:02 -05:00
Steven Fackler 9e8f683476 Remove Alloc::oom 2018-04-22 10:08:49 -07:00
bors 3809bbf47c Auto merge of #49488 - alexcrichton:small-wasm-panic, r=sfackler
std: Minimize size of panicking on wasm

This commit applies a few code size optimizations for the wasm target to
the standard library, namely around panics. We notably know that in most
configurations it's impossible for us to print anything in
wasm32-unknown-unknown so we can skip larger portions of panicking that
are otherwise simply informative. This allows us to get quite a nice
size reduction.

Finally we can also tweak where the allocation happens for the
`Box<Any>` that we panic with. By only allocating once unwinding starts
we can reduce the size of a panicking wasm module from 44k to 350 bytes.
2018-04-16 23:19:41 +00:00
Mike Hommey bd9ff8476d Cleanup liballoc use statements
Some modules were still using the deprecated `allocator` module, use the
`alloc` module instead.

Some modules were using `super` while it's not needed.

Some modules were more or less ordering them, and other not, so the
latter have been modified to match the others.
2018-04-14 08:43:13 +09:00
Alex Crichton 66c5e3ffb2 Reduce the size of panics in RawVec
Create one canonical location which panics with "capacity overflow" instead of
having many. This reduces the size of a `panic!("{}", 1)` binary on wasm from
34k to 17k.
2018-04-13 07:04:23 -07: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 c957e99b30 realloc with a new size only, not a full new layout.
Changing the alignment with realloc is not supported.
2018-04-12 22:53:13 +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 ba7081a033 Make AllocErr a zero-size unit struct 2018-04-12 22:53:03 +02:00
Simon Sapin e521b8b472 Actually deprecate the Heap type 2018-04-12 22:52:47 +02:00
Mike Hommey b647583c2d Use Alloc and Layout from core::heap.
94d1970bba 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
snf 92bfcd2b19 implementing fallible allocation API (try_reserve) for Vec, String and HashMap 2018-03-14 03:48:42 -07:00
Simon Sapin fb03a49c25 Replace Unique<T> with NonZero<T> in Alloc trait 2018-01-20 10:55:16 +01:00
Lance John bf95f9f185 Fix typo. 2017-11-01 21:02:08 +08:00
Corey Farwell a4387d54dc Rollup merge of #43891 - Fourchaux:master, r=steveklabnik
Fix typos & us spellings

Fixing some typos and non en-US spellings.

(Update of PR https://github.com/rust-lang/rust/pull/42812 )
2017-08-17 10:44:07 -04:00
Zack M. Davis 1b6c9605e4 use field init shorthand EVERYWHERE
Like #43008 (f668999), but _much more aggressive_.
2017-08-15 15:29:17 -07:00
Fourchaux c7104be1a3 Fix typos & us spellings 2017-08-15 21:56:30 +02:00
Alex Crichton 3a831653d0 std: Unsafe-away runtime checks in Vec
The `RawVec` type has a number of invariants that it upholds throughout its
execution, and as a result many of the runtime checks imposed by using `Layout`
in a "raw" fashion aren't actually necessary. For example a `RawVec`'s capacity
is intended to always match the layout which "fits" the allocation, so we don't
need any runtime checks when retrieving the current `Layout` for a vector.
Consequently, this adds a safe `current_layout` function which internally uses
the `from_size_align_unchecked` function.

Along the same lines we know that most construction of new layouts will not
overflow. All allocations in `RawVec` are kept below `isize::MAX` and valid
alignments are also kept low enough that we're guaranteed that `Layout` for a
doubled vector will never overflow and will always succeed construction.
Consequently a few locations can use `from_size_align_unchecked` in addition
when constructing the *new* layout to allocate (or reallocate), which allows for
eliding some more runtime checks.

Overall this should significant improve performance for an important function,
`RawVec::double`. This commit removes four runtime jumps before `__rust_realloc`
is called, as well as one after it's called.
2017-08-12 11:06:45 -07:00
Simon Sapin 0a08ad0443 Rename {NonZero,Shared,Unique}::new to new_unchecked 2017-07-22 20:38:16 +02:00
Alex Crichton 695dee063b rustc: Implement the #[global_allocator] attribute
This PR is an implementation of [RFC 1974] which specifies a new method of
defining a global allocator for a program. This obsoletes the old
`#![allocator]` attribute and also removes support for it.

[RFC 1974]: https://github.com/rust-lang/rfcs/pull/197

The new `#[global_allocator]` attribute solves many issues encountered with the
`#![allocator]` attribute such as composition and restrictions on the crate
graph itself. The compiler now has much more control over the ABI of the
allocator and how it's implemented, allowing much more freedom in terms of how
this feature is implemented.

cc #27389
2017-07-05 14:37:01 -07:00
kennytm 4711982314 Removed as many "```ignore" as possible.
Replaced by adding extra imports, adding hidden code (`# ...`), modifying
examples to be runnable (sorry Homura), specifying non-Rust code, and
converting to should_panic, no_run, or compile_fail.

Remaining "```ignore"s received an explanation why they are being ignored.
2017-06-23 15:31:53 +08:00
Felix S. Klock II 23ab50455f Allocator integration in RawVec.
Includes methods exposing underlying allocator and the dellocation
routine.

Includes test illustrating a tiny `Alloc` that just bounds the total
bytes allocated.

Alpha-renamed `Allocator` to `Alloc` (and `HeapAllocator` to `HeapAlloc`).
2017-06-15 23:48:30 +02:00
Murarth eadda7665e Merge crate collections into alloc 2017-06-13 23:37:34 -07:00
Alexis Beingessner c7cffc5f4e Deprecate heap::EMPTY in favour of Unique::empty or otherwise. 2017-05-04 23:54:54 -04:00
Alexis Beingessner 4ff583b116 fallout from NonZero/Unique/Shared changes 2017-05-04 23:54:54 -04:00
Matt Brubeck 675475c4d3 Specialize Vec::from_elem<u8> to use calloc or memset
Fixes #38723.
2017-04-15 09:01:56 -07:00
Andrew Paseltiner ca9b07bbc9 Replace uses of #[unsafe_destructor_blind_to_params] with #[may_dangle]
CC #34761
2016-12-28 17:47:10 -05:00
Srinivas Reddy Thatiparthy 54e320d4bc run rustfmt on various folders 2016-10-16 15:41:01 +05:30
Brian Anderson 3b49c60ab7 Remove stage0 hacks 2016-09-28 23:17:56 +00:00
Eduard Burtescu 119508cdb4 Remove drop flags from structs and enums implementing Drop. 2016-08-24 13:23:37 +03:00
Ivan Ukhov 10fce6e2d7 Fix a couple of typos in RawVec 2016-08-14 06:59:43 +02:00
Jake Goulding bc7595c8ab Support 16-bit pointers as well as i/usize
This is based on the original work of Dylan McKay for the
[avr-rust project][ar].

[ar]: https://github.com/avr-rust/rust
2016-05-19 13:55:13 -04:00
Matt Brubeck 06f5fa4a0c Inline RawVec::cap 2016-05-09 11:44:55 -07:00