6111 Commits

Author SHA1 Message Date
Jorge Aparicio
c66ae29883 rewrite checked_{div,rem} to no contain any reference to panics
even without optimizations
2016-10-07 15:14:28 -05:00
Eric Roshan-Eisner
7bbfac60e3 update sip.rs for new intrinsics and defaults 2016-10-04 14:48:03 -07:00
Manish Goregaokar
268521f58a Rollup merge of #36908 - GuillaumeGomez:default_doc, r=apasel422
fix typos

r? @steveklabnik
2016-10-04 15:24:03 +05:30
Manish Goregaokar
d25aeb0ef1 Rollup merge of #36902 - ollie27:stab_impls, r=alexcrichton
std: Correct stability attributes for some implementations

These are displayed by rustdoc so should be correct.
2016-10-04 15:24:02 +05:30
bors
7a26aeca77 Auto merge of #36815 - alexcrichton:stabilize-1.13, r=aturon
std: Stabilize and deprecate APIs for 1.13

This commit is intended to be backported to the 1.13 branch, and works with the
following APIs:

Stabilized

* `i32::checked_abs`
* `i32::wrapping_abs`
* `i32::overflowing_abs`
* `RefCell::try_borrow`
* `RefCell::try_borrow_mut`

Deprecated

* `BinaryHeap::push_pop`
* `BinaryHeap::replace`
* `SipHash13`
* `SipHash24`
* `SipHasher` - use `DefaultHasher` instead in the `std::collections::hash_map`
  module

Closes #28147
Closes #34767
Closes #35057
Closes #35070
2016-10-03 11:00:03 -07:00
Alex Crichton
10c3134da0 std: Stabilize and deprecate APIs for 1.13
This commit is intended to be backported to the 1.13 branch, and works with the
following APIs:

Stabilized

* `i32::checked_abs`
* `i32::wrapping_abs`
* `i32::overflowing_abs`
* `RefCell::try_borrow`
* `RefCell::try_borrow_mut`
* `DefaultHasher`
* `DefaultHasher::new`
* `DefaultHasher::default`

Deprecated

* `BinaryHeap::push_pop`
* `BinaryHeap::replace`
* `SipHash13`
* `SipHash24`
* `SipHasher` - use `DefaultHasher` instead in the `std::collections::hash_map`
  module

Closes #28147
Closes #34767
Closes #35057
Closes #35070
2016-10-03 10:34:34 -07:00
Guillaume Gomez
a638580c08 fix typos 2016-10-02 14:45:49 +02:00
Oliver Middleton
06a7dcd355 std: Correct stability attributes for some implementations
These are displayed by rustdoc so should be correct.
2016-10-01 23:58:14 +01:00
Alex Burka
ba1a49337f impl Debug for raw pointers to unsized data 2016-10-01 01:50:56 +00:00
bors
50932b5f4e Auto merge of #36864 - steveklabnik:rollup, r=steveklabnik
Rollup of 13 pull requests

- Successful merges: #36529, #36535, #36576, #36623, #36711, #36750, #36810, #36829, #36833, #36841, #36842, #36851, #36860
- Failed merges:
2016-09-30 11:08:58 -07:00
Steve Klabnik
fb880dfce4 Rollup merge of #36810 - GuillaumeGomez:ops_doc, r=steveklabnik
Add missing urls for ops module

Part of #29365.

r? @steveklabnik
2016-09-30 13:44:47 -04:00
Steve Klabnik
083af27779 Rollup merge of #36750 - GuillaumeGomez:cmp_doc, r=steveklabnik
Add missing links on cmp module

r? @steveklabnik
2016-09-30 13:44:47 -04:00
Steve Klabnik
dcec48dc13 Rollup merge of #36535 - GuillaumeGomez:macro_url, r=steveklabnik
Update to new macro url syntax

r? @steveklabnik
2016-09-30 13:44:46 -04:00
Steve Klabnik
f6497ea569 Rollup merge of #36529 - bluss:index-doc, r=GuillaumeGomez
Clarify Index/IndexMut trait docs

Use examples and placeholder variable names with more meaning, to not
make it so abstract.
2016-09-30 13:44:45 -04:00
bors
954873055a Auto merge of #36823 - durka:discriminant_value, r=nagisa
add wrapper for discriminant_value, take 2

[This is #34785 reopened, since @bors apparently gave up on that thread.]

add wrapper for discriminant_value intrinsic

Implementation of [RFC 1696](https://github.com/rust-lang/rfcs/blob/master/text/1696-discriminant.md).

Wraps the `discriminant_value` intrinsic under the name `std::mem::discriminant`. In order to avoid prematurely leaking information about the implementation of enums, the return value is an opaque type, generic over the enum type, which implements Copy, Clone, PartialEq, Eq, Hash, and Debug (notably not PartialOrd). There is currently no way to get the value out excepting printing the debug representation.

The wrapper is safe and can be stabilized soon as per discussion in #24263.

cc @aturon
r? @nagisa
2016-09-30 07:35:04 -07:00
David Henningsson
971e0be77c str: Fix documentation typo
from_utf8 returns a Result, not an Option.

Signed-off-by: David Henningsson <diwic@ubuntu.com>
2016-09-30 06:13:14 +02:00
bors
289f3a4ca7 Auto merge of #36377 - tormol:encode_utf, r=alexcrichton
Change encode_utf{8,16}() to write to a buffer and panic if it's too small

cc #27784

Should the "A buffer that's too small" examples be removed and replaced by tests?
2016-09-29 11:20:02 -07:00
Guillaume Gomez
5cec065399 Add missing urls for ops module 2016-09-29 15:33:13 +02:00
bors
91f34c0c70 Auto merge of #36818 - jonathandturner:rollup, r=jonathandturner
Rollup of 12 pull requests

- Successful merges: #35286, #35892, #36460, #36704, #36741, #36760, #36787, #36789, #36794, #36803, #36811, #36813
- Failed merges:
2016-09-28 21:55:15 -07:00
Jonathan Turner
02c050644b Rollup merge of #36811 - brson:bootstrap, r=alexcrichton
Update bootstrap compiler
2016-09-28 20:21:52 -07:00
bors
eee2d04d87 Auto merge of #36395 - durka:rangeinclusive-no-esi, r=alexcrichton
remove ExactSizeIterator from RangeInclusive<{u,i}{32,size}>

Fixes #36386.

This is a [breaking-change] for nightly users of `#![feature(inclusive_range_syntax)]` and/or `#![feature(inclusive_range)]`.
2016-09-28 18:31:07 -07:00
Brian Anderson
3b49c60ab7 Remove stage0 hacks 2016-09-28 23:17:56 +00:00
tormol
13a2dd96fe [breaking-change] std: change encode_utf{8,16}() to take a buffer and return a slice
They panic if the buffer is too small.
2016-09-28 09:03:30 +02:00
Alex Burka
a84b55085e add wrapper for discriminant_value 2016-09-27 23:29:01 +00:00
Corey Farwell
2ba02a773e Add basic doc example for core::ptr::write_bytes. 2016-09-26 23:11:47 -04:00
Guillaume Gomez
4e7338afa8 Add missing links on cmp module 2016-09-26 20:43:54 +02:00
Jonathan Turner
5d4c0edb69 Rollup merge of #36589 - jpadkins:option_docs_safety_wording_fix, r=bluss
fixed the safety header/wording in option.rs

Fixes #36581

screenshot of the rendered documentation: http://imgur.com/14kLVrA

r? @steveklabnik
2016-09-22 11:25:01 -07:00
Jonathan Turner
b60fc5d16a Rollup merge of #36423 - GuillaumeGomez:eq_impl, r=pnkfelix
Add missing Eq implementations

Part of #36301.
2016-09-22 11:25:01 -07:00
Ashley Williams
3d8d55787b add assert_ne and debug_assert_ne macros 2016-09-21 14:38:26 +02:00
bors
cbd84aeb73 Auto merge of #34942 - porglezomp:master, r=sfackler
Fix overflow checking in unsigned pow()

The pow() method for unsigned integers produced 0 instead of trapping overflow for certain inputs. Calls such as 2u32.pow(1024) produced 0 when they should trap an overflow. This also adds tests for the correctly handling overflow in unsigned pow().

This was previously fixed for signed integers in #28248, but it seems unsigned integers got missed that time.

For issue number #34913
2016-09-19 19:03:52 -07:00
jacobpadkins
8b02aa1c80 fixed the safety header/wording in option.rs 2016-09-19 17:55:44 -05:00
bors
bfac5d6d9f Auto merge of #36523 - Mark-Simulacrum:format-args-link, r=GuillaumeGomez
Add links between format_args! macro and std::fmt::Arguments struct

r? @GuillaumeGomez
2016-09-18 17:25:01 -07:00
Guillaume Gomez
b4c739dbdd Add missing Eq implementations 2016-09-18 14:26:49 +02:00
bors
fb62f4d544 Auto merge of #36490 - bluss:zip-slightly-despecialized-edition, r=alexcrichton
Remove data structure specialization for .zip() iterator

Go back on half the specialization, the part that changed the Zip
struct's fields themselves depending on the types of the iterators.

Previous PR: #33090

This means that the Zip iterator will always carry two usize fields,
which are sometimes unused. If a whole for loop using a .zip() iterator is
inlined, these are simply removed and have no effect.

The same improvement for Zip of for example slice iterators remain, and
they still optimize well. However, like when the specialization of zip
was merged, the compiler is still very sensistive to the exact context.

For example this code only autovectorizes if the function is used, not
if the code in zip_sum_i32 is inserted inline where it was called:

```rust
fn zip_sum_i32(xs: &[i32], ys: &[i32]) -> i32 {
    let mut s = 0;
    for (&x, &y) in xs.iter().zip(ys) {
        s += x * y;
    }
    s
}

fn zipdot_i32_default_zip(b: &mut test::Bencher)
{
    let xs = vec![1; 1024];
    let ys = vec![1; 1024];

    b.iter(|| {
        zip_sum_i32(&xs, &ys)
    })
}
```

Include a test that checks that `Zip<T, U>` is covariant w.r.t. T and U.

Fixes #35727
2016-09-17 08:23:44 -07:00
Mark-Simulacrum
ad63215732 Add links between format_args! macro and std::fmt::Arguments struct 2016-09-16 15:33:53 -06:00
Jonathan Turner
919cbc0168 Rollup merge of #36519 - Mark-Simulacrum:example-asmut, r=GuillaumeGomez
Add example in AsMut trait documentation

Let me know of any changes I should make.

r? @GuillaumeGomez
2016-09-16 09:29:49 -07:00
Jonathan Turner
d48f17b21e Rollup merge of #36424 - kmcallister:gh-29361-marker-docs, r=GuillaumeGomez
Tweak std::marker docs

Fixes #29361.

r? @GuillaumeGomez
2016-09-16 09:29:48 -07:00
Guillaume Gomez
f6ab636b86 Update to new macro url syntax 2016-09-16 17:59:24 +02:00
Ulrik Sverdrup
fe62b41752 Clarify Index/IndexMut trait docs
Use examples and placeholder variable names with more meaning, to not
make it so abstract.
2016-09-16 11:30:34 +02:00
Mark-Simulacrum
102ee5e70a Add example in AsMut trait documentation 2016-09-15 19:47:04 -06:00
Keegan McAllister
b735c1bc78 Tweak std::marker docs
Fixes #29361.
2016-09-15 12:31:17 -07:00
bors
d1acabeaa2 Auto merge of #35992 - SimonSapin:rc-arc-ptr-eq, r=alexcrichton
Add `pub fn ptr_eq(this: &Self, other: &Self) -> bool` to Rc and Arc

Servo and Kuchiki have had helper functions doing this for some time.
2016-09-15 09:58:26 -07:00
Simon Sapin
5ce9feeb8c Add std::ptr::eq, for referential equality of &T references.
Fixes https://github.com/rust-lang/rfcs/issues/1155
2016-09-15 18:48:16 +02:00
bors
dc75933aba Auto merge of #36491 - Manishearth:rollup, r=Manishearth
Rollup of 9 pull requests

- Successful merges: #36384, #36405, #36425, #36429, #36438, #36454, #36459, #36461, #36463
- Failed merges: #36444
2016-09-15 06:14:26 -07:00
Manish Goregaokar
69a7f92a7f Rollup merge of #36454 - bluss:slice-primitive-index, r=alexcrichton
Use primitive indexing in slice's Index/IndexMut

[T]'s Index implementation is normally not used for indexing, instead
the compiler supplied indexing is used.

Use the compiler supplied version in Index/IndexMut.

This removes an inconsistency:

Compiler supplied bound check failures look like this:

thread 'main' panicked at 'index out of bounds: the len is 3 but the index is 4'

If you convince Rust to use the Index impl for slices, bounds check
failure looks like this instead:

thread 'main' panicked at 'assertion failed: index < self.len()'

The latter is used if you for example use Index generically:

```rust
use std::ops::Index;
fn foo<T: ?Sized>(x: &T) where T: Index<usize> { &x[4]; }

foo(&[1, 2, 3][..])
```
2016-09-15 18:16:21 +05:30
Manish Goregaokar
726850170d Rollup merge of #36384 - petrochenkov:derclone, r=alexcrichton
Improve shallow `Clone` deriving

`Copy` unions now support `#[derive(Clone)]`.
Less code is generated for `#[derive(Clone, Copy)]`.
+
Unions now support `#[derive(Eq)]`.
Less code is generated for `#[derive(Eq)]`.

---
Example of code reduction:
```
enum E {
	A { a: u8, b: u16 },
	B { c: [u8; 100] },
}
```
Before:
```
fn clone(&self) -> E {
    match (&*self,) {
        (&E::A { a: ref __self_0, b: ref __self_1 },) => {
            ::std::clone::assert_receiver_is_clone(&(*__self_0));
            ::std::clone::assert_receiver_is_clone(&(*__self_1));
            *self
        }
        (&E::B { c: ref __self_0 },) => {
            ::std::clone::assert_receiver_is_clone(&(*__self_0));
            *self
        }
    }
}
```
After:
```
fn clone(&self) -> E {
    {
        let _: ::std::clone::AssertParamIsClone<u8>;
        let _: ::std::clone::AssertParamIsClone<u16>;
        let _: ::std::clone::AssertParamIsClone<[u8; 100]>;
        *self
    }
}
```

All the matches are removed, bound assertions are more lightweight.
`let _: Checker<CheckMe>;`, unlike `checker(&check_me);`, doesn't have to be translated by rustc_trans and then inlined by LLVM, it doesn't even exist in MIR, this means faster compilation.

---
Union impls are generated like this:
```
union U {
	a: u8,
	b: u16,
	c: [u8; 100],
}
```
```
fn clone(&self) -> U {
    {
        let _: ::std::clone::AssertParamIsCopy<Self>;
        *self
    }
}
```

Fixes https://github.com/rust-lang/rust/issues/36043
cc @durka
r? @alexcrichton
2016-09-15 18:16:19 +05:30
Ulrik Sverdrup
af1a3ffbeb Remove data structure specialization for .zip() iterator
Go back on half the specialization, the part that changed the Zip
struct's fields themselves depending on the types of the iterators.

This means that the Zip iterator will always carry two usize fields,
which are unused. If a whole for loop using a .zip() iterator is
inlined, these are simply removed and have no effect.

The same improvement for Zip of for example slice iterators remain, and
they still optimize well. However, like when the specialization of zip
was merged, the compiler is still very sensistive to the exact context.

For example this code only autovectorizes if the function is used, not
if the code in zip_sum_i32 is inserted inline it was called:

```
fn zip_sum_i32(xs: &[i32], ys: &[i32]) -> i32 {
    let mut s = 0;
    for (&x, &y) in xs.iter().zip(ys) {
        s += x * y;
    }
    s
}

fn zipdot_i32_default_zip(b: &mut test::Bencher)
{
    let xs = vec![1; 1024];
    let ys = vec![1; 1024];

    b.iter(|| {
        zip_sum_i32(&xs, &ys)
    })
}
```

Include a test that checks that Zip<T, U> is covariant w.r.t. T and U.
2016-09-15 13:00:15 +02:00
bors
e2c64d1690 Auto merge of #36372 - sfackler:sum-prod-overflow, r=alexcrichton
Inherit overflow checks for sum and product

We have previously documented the fact that these will panic on overflow, but I think this behavior is what people actually want/expect. `#[rustc_inherit_overflow_checks]` didn't exist when we discussed these for stabilization.

r? @alexcrichton

Closes #35807
2016-09-15 02:43:01 -07:00
Ulrik Sverdrup
a4ee9c6e96 core: Use primitive indexing in slice's Index/IndexMut
[T]'s Index implementation is normally not used for indexing, instead
the compiler supplied indexing is used.

Use the compiler supplied version in Index/IndexMut.

This removes an inconsistency:

Compiler supplied bound check failures look like this:

thread 'main' panicked at 'index out of bounds: the len is 3 but the index is 4'

If you convince Rust to use the Index impl for slices, bounds check
failure looks like this instead:

thread 'main' panicked at 'assertion failed: index < self.len()'

The latter is used if you for example use Index generically::

   use std::ops::Index;
   fn foo<T: ?Sized>(x: &T) where T: Index<usize> { &x[4]; }

   foo(&[1, 2, 3][..])
2016-09-14 20:19:35 +02:00
Guillaume Gomez
a89690ec00 Rollup merge of #36396 - athulappadan:Default-docs, r=bluss
Documentation of what Default does for each type

Addresses #36265
I haven't changed the following types due to doubts:

1)src/libstd/ffi/c_str.rs
2)src/libcore/iter/sources.rs
3)src/libcore/hash/mod.rs
4)src/libcore/hash/mod.rs
5)src/librustc/middle/privacy.rs

r? @steveklabnik
2016-09-14 17:15:37 +02:00