Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Rollup of 18 pull requests #50611

Merged
merged 54 commits into from
May 11, 2018
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
54 commits
Select commit Hold shift + click to select a range
5ab4c81
str/slice: factor out overflow error messages
ExpHP Apr 30, 2018
6b749b0
Clean up the other Slice*Inclusive impls for str
ExpHP Apr 30, 2018
4fab167
update libcore's comment about str tests
ExpHP Apr 30, 2018
0842dc6
collect str SliceIndex tests into a mod
ExpHP Apr 30, 2018
ce66f5d
flesh out tests for SliceIndex
ExpHP Apr 30, 2018
02b3da1
decrease false negatives for str overflow test
ExpHP Apr 30, 2018
030aa9b
revise macro in slice tests
ExpHP Apr 30, 2018
f1d7b45
revise test gen macro for str
ExpHP Apr 30, 2018
b0fcb5f
Extend tests for RFC1598 (GAT)
gavento Mar 27, 2018
e09d9ec
Tidy up the code
gavento Mar 27, 2018
a66a011
Fix test stderr after tidying the source
gavento Mar 28, 2018
0617b92
Add tests for GAT parameter number and kindness
gavento Mar 28, 2018
571337b
Update tests with Nikos comments
gavento Apr 11, 2018
a43171a
Update tests to use compile-pass
gavento May 2, 2018
9073c89
Minor fromatting for RFC 1598 tests
gavento May 2, 2018
000d3c9
Make DepGraph::previous_work_products immutable
wesleywiser May 8, 2018
ea49428
Don't use Lock for heavily accessed CrateMetadata::cnum_map.
michaelwoerister May 8, 2018
868d2a1
Fix comment
wesleywiser May 8, 2018
5128aff
Fix update-references for tests within subdirectories.
ehuss May 4, 2018
31d2012
Adapt some method visibilities in librustc_metadata::cstore.
michaelwoerister May 8, 2018
77c40f8
Inline `Span` methods.
nnethercote May 9, 2018
78262e7
Use SmallVec for DepNodeIndex within dep_graph.
nnethercote May 9, 2018
0ba1c10
Clarify in the docs that `mul_add` is not always faster.
frewsxcv May 9, 2018
b8b957d
Make CrateNum allocation more thread-safe.
michaelwoerister May 8, 2018
a981089
Allow for specifying a linker plugin for cross-language LTO
michaelwoerister Apr 25, 2018
23aa483
add fn `into_inner(self) -> (Idx, Idx)` to RangeInclusive (#49022)
May 9, 2018
254b601
std: Avoid `ptr::copy` if unnecessary in `vec::Drain`
alexcrichton May 9, 2018
4537025
Add comment about first element in CStore::metas.
michaelwoerister May 9, 2018
8010604
move See also links to top
ExpHP May 9, 2018
b8eb91a
make std::str link into See also link
ExpHP May 9, 2018
9c4e5b3
Restore RawVec::reserve* documentation
glandium May 10, 2018
ae3feff
Remove unnecessary mutable borrow and resizing
whitfin May 10, 2018
7def3f0
Retry when downloading the Docker cache.
kennytm May 10, 2018
12446dd
Pull in a wasm fix from LLVM upstream
alexcrichton May 7, 2018
85f5738
Fix tuple struct field spans
estebank May 9, 2018
ecd9898
Rollup merge of #49423 - gavento:gavento-dev, r=nikomatsakis
alexcrichton May 10, 2018
cff1a26
Rollup merge of #50010 - ExpHP:slice-bounds, r=alexcrichton
alexcrichton May 10, 2018
7bd4fda
Rollup merge of #50447 - ehuss:fix-update-references, r=alexcrichton
alexcrichton May 10, 2018
4c4396c
Rollup merge of #50514 - alexcrichton:update-llvm, r=kennytm
alexcrichton May 10, 2018
bb130ce
Rollup merge of #50524 - wesleywiser:immutable_prev_work_products, r=…
alexcrichton May 10, 2018
296f952
Rollup merge of #50532 - michaelwoerister:lockless-cnum-map, r=Zoxc
alexcrichton May 10, 2018
4199a6c
Rollup merge of #50538 - michaelwoerister:atomic-cnums, r=Zoxc
alexcrichton May 10, 2018
a77ba86
Rollup merge of #50564 - nnethercote:inline-Span-methods, r=petrochenkov
alexcrichton May 10, 2018
e23ec4b
Rollup merge of #50565 - nnethercote:try_mark_green, r=michaelwoerister
alexcrichton May 10, 2018
dd40277
Rollup merge of #50569 - michaelwoerister:cross-lang-lto-2, r=alexcri…
alexcrichton May 10, 2018
be6fab8
Rollup merge of #50572 - frewsxcv:frewsxcv-fma, r=sfackler
alexcrichton May 10, 2018
445e53e
Rollup merge of #50574 - s3bk:range_inclusive_into_inner, r=SimonSapin
alexcrichton May 10, 2018
44f8b4d
Rollup merge of #50575 - alexcrichton:faster-drain-drop, r=sfackler
alexcrichton May 10, 2018
c798cbb
Rollup merge of #50588 - ExpHP:i-can-see-my-house-from-here, r=frewsxcv
alexcrichton May 10, 2018
1f1c65d
Rollup merge of #50590 - estebank:off-by-one, r=nikomatsakis
alexcrichton May 10, 2018
8b5f692
Rollup merge of #50591 - glandium:cleanup, r=dtolnay
alexcrichton May 10, 2018
74e731f
Rollup merge of #50598 - whitfin:unnecessary-mut-borrow, r=michaelwoe…
alexcrichton May 10, 2018
694ba9c
Rollup merge of #50606 - kennytm:retry-docker-cache, r=alexcrichton
alexcrichton May 10, 2018
2c5d13d
Skip a memory-hungry test that OOMs
alexcrichton May 10, 2018
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 3 additions & 1 deletion src/ci/docker/run.sh
Original file line number Diff line number Diff line change
Expand Up @@ -36,8 +36,10 @@ if [ -f "$docker_dir/$image/Dockerfile" ]; then
s3url="s3://$SCCACHE_BUCKET/docker/$cksum"
url="https://s3-us-west-1.amazonaws.com/$SCCACHE_BUCKET/docker/$cksum"
echo "Attempting to download $s3url"
rm -f /tmp/rustci_docker_cache
set +e
loaded_images=$(curl $url | docker load | sed 's/.* sha/sha/')
retry curl -f -L -C - -o /tmp/rustci_docker_cache "$url"
loaded_images=$(docker load -i /tmp/rustci_docker_cache | sed 's/.* sha/sha/')
set -e
echo "Downloaded containers:\n$loaded_images"
fi
Expand Down
3 changes: 2 additions & 1 deletion src/ci/shared.sh
Original file line number Diff line number Diff line change
Expand Up @@ -21,11 +21,12 @@ function retry {
while true; do
"$@" && break || {
if [[ $n -lt $max ]]; then
sleep $n # don't retry immediately
((n++))
echo "Command failed. Attempt $n/$max:"
else
echo "The command has failed after $n attempts."
exit 1
return 1
fi
}
done
Expand Down
113 changes: 57 additions & 56 deletions src/liballoc/raw_vec.rs
Original file line number Diff line number Diff line change
Expand Up @@ -385,26 +385,7 @@ impl<T, A: Alloc> RawVec<T, A> {
}
}

/// Ensures that the buffer contains at least enough space to hold
/// `used_cap + needed_extra_cap` elements. If it doesn't already,
/// will reallocate the minimum possible amount of memory necessary.
/// Generally this will be exactly the amount of memory necessary,
/// but in principle the allocator is free to give back more than
/// we asked for.
///
/// If `used_cap` exceeds `self.cap()`, this may fail to actually allocate
/// the requested space. This is not really unsafe, but the unsafe
/// code *you* write that relies on the behavior of this function may break.
///
/// # Panics
///
/// * Panics if the requested capacity exceeds `usize::MAX` bytes.
/// * Panics on 32-bit platforms if the requested capacity exceeds
/// `isize::MAX` bytes.
///
/// # Aborts
///
/// Aborts on OOM
/// The same as `reserve_exact`, but returns on errors instead of panicking or aborting.
pub fn try_reserve_exact(&mut self, used_cap: usize, needed_extra_cap: usize)
-> Result<(), CollectionAllocErr> {

Expand Down Expand Up @@ -441,6 +422,26 @@ impl<T, A: Alloc> RawVec<T, A> {
}
}

/// Ensures that the buffer contains at least enough space to hold
/// `used_cap + needed_extra_cap` elements. If it doesn't already,
/// will reallocate the minimum possible amount of memory necessary.
/// Generally this will be exactly the amount of memory necessary,
/// but in principle the allocator is free to give back more than
/// we asked for.
///
/// If `used_cap` exceeds `self.cap()`, this may fail to actually allocate
/// the requested space. This is not really unsafe, but the unsafe
/// code *you* write that relies on the behavior of this function may break.
///
/// # Panics
///
/// * Panics if the requested capacity exceeds `usize::MAX` bytes.
/// * Panics on 32-bit platforms if the requested capacity exceeds
/// `isize::MAX` bytes.
///
/// # Aborts
///
/// Aborts on OOM
pub fn reserve_exact(&mut self, used_cap: usize, needed_extra_cap: usize) {
match self.try_reserve_exact(used_cap, needed_extra_cap) {
Err(CapacityOverflow) => capacity_overflow(),
Expand All @@ -463,6 +464,42 @@ impl<T, A: Alloc> RawVec<T, A> {
Ok(cmp::max(double_cap, required_cap))
}

/// The same as `reserve`, but returns on errors instead of panicking or aborting.
pub fn try_reserve(&mut self, used_cap: usize, needed_extra_cap: usize)
-> Result<(), CollectionAllocErr> {
unsafe {
// NOTE: we don't early branch on ZSTs here because we want this
// to actually catch "asking for more than usize::MAX" in that case.
// If we make it past the first branch then we are guaranteed to
// panic.

// Don't actually need any more capacity.
// Wrapping in case they give a bad `used_cap`
if self.cap().wrapping_sub(used_cap) >= needed_extra_cap {
return Ok(());
}

let new_cap = self.amortized_new_size(used_cap, needed_extra_cap)?;
let new_layout = Layout::array::<T>(new_cap).map_err(|_| CapacityOverflow)?;

// FIXME: may crash and burn on over-reserve
alloc_guard(new_layout.size())?;

let res = match self.current_layout() {
Some(layout) => {
debug_assert!(new_layout.align() == layout.align());
self.a.realloc(NonNull::from(self.ptr).as_opaque(), layout, new_layout.size())
}
None => self.a.alloc(new_layout),
};

self.ptr = res?.cast().into();
self.cap = new_cap;

Ok(())
}
}

/// Ensures that the buffer contains at least enough space to hold
/// `used_cap + needed_extra_cap` elements. If it doesn't already have
/// enough capacity, will reallocate enough space plus comfortable slack
Expand Down Expand Up @@ -515,42 +552,6 @@ impl<T, A: Alloc> RawVec<T, A> {
/// # vector.push_all(&[1, 3, 5, 7, 9]);
/// # }
/// ```
pub fn try_reserve(&mut self, used_cap: usize, needed_extra_cap: usize)
-> Result<(), CollectionAllocErr> {
unsafe {
// NOTE: we don't early branch on ZSTs here because we want this
// to actually catch "asking for more than usize::MAX" in that case.
// If we make it past the first branch then we are guaranteed to
// panic.

// Don't actually need any more capacity.
// Wrapping in case they give a bad `used_cap`
if self.cap().wrapping_sub(used_cap) >= needed_extra_cap {
return Ok(());
}

let new_cap = self.amortized_new_size(used_cap, needed_extra_cap)?;
let new_layout = Layout::array::<T>(new_cap).map_err(|_| CapacityOverflow)?;

// FIXME: may crash and burn on over-reserve
alloc_guard(new_layout.size())?;

let res = match self.current_layout() {
Some(layout) => {
debug_assert!(new_layout.align() == layout.align());
self.a.realloc(NonNull::from(self.ptr).as_opaque(), layout, new_layout.size())
}
None => self.a.alloc(new_layout),
};

self.ptr = res?.cast().into();
self.cap = new_cap;

Ok(())
}
}

/// The same as try_reserve, but errors are lowered to a call to oom().
pub fn reserve(&mut self, used_cap: usize, needed_extra_cap: usize) {
match self.try_reserve(used_cap, needed_extra_cap) {
Err(CapacityOverflow) => capacity_overflow(),
Expand Down
4 changes: 2 additions & 2 deletions src/liballoc/slice.rs
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,8 @@

//! A dynamically-sized view into a contiguous sequence, `[T]`.
//!
//! *[See also the slice primitive type](../../std/primitive.slice.html).*
//!
//! Slices are a view into a block of memory represented as a pointer and a
//! length.
//!
Expand Down Expand Up @@ -78,8 +80,6 @@
//! * Further methods that return iterators are [`.split`], [`.splitn`],
//! [`.chunks`], [`.windows`] and more.
//!
//! *[See also the slice primitive type](../../std/primitive.slice.html).*
//!
//! [`Clone`]: ../../std/clone/trait.Clone.html
//! [`Eq`]: ../../std/cmp/trait.Eq.html
//! [`Ord`]: ../../std/cmp/trait.Ord.html
Expand Down
4 changes: 2 additions & 2 deletions src/liballoc/str.rs
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,8 @@

//! Unicode string slices.
//!
//! *[See also the `str` primitive type](../../std/primitive.str.html).*
//!
//! The `&str` type is one of the two main string types, the other being `String`.
//! Unlike its `String` counterpart, its contents are borrowed.
//!
Expand All @@ -29,8 +31,6 @@
//! ```
//! let hello_world: &'static str = "Hello, world!";
//! ```
//!
//! *[See also the `str` primitive type](../../std/primitive.str.html).*

#![stable(feature = "rust1", since = "1.0.0")]

Expand Down
Loading