Commit Graph

49536 Commits

Author SHA1 Message Date
Ulrik Sverdrup
9d77694d5d Fix type parameter default error to mention type and trait definitions
Introduced in PR #30724, needs to mention that type parameter defaults
are legal in trait and type definitions too.
2016-01-19 12:38:24 +01:00
bors
bff52927f5 Auto merge of #30975 - Manishearth:rollup, r=Manishearth
- Successful merges: #30938, #30940, #30943, #30949, #30952, #30957, #30959
- Failed merges:
2016-01-17 12:23:57 +00:00
Manish Goregaokar
00a4eeadaf Rollup merge of #30959 - bluss:bench-resolution, r=Gankro
test: Increase resolution of MB/s stat for bench runs close to 1 second

MB/s was based on the number of iterations performed in a second, when
the iteration duration nears 1 second (1e9 ns), the resolution of the
MB/s stat decreases.
2016-01-17 17:25:48 +05:30
Manish Goregaokar
3ba057b0b1 Rollup merge of #30957 - GuillaumeGomez:patch-3, r=apasel422
r? @Manishearth
2016-01-17 17:25:48 +05:30
Manish Goregaokar
dbca989721 Rollup merge of #30952 - jonastepe:nomicon_vec_zst_code_fix, r=Gankro
* Moved semicolon to the right place in the `let` statement in the ZST section.
* Fixed the missing ZST additions for `RawValIter<T>` from this section in the final code section.
2016-01-17 17:25:48 +05:30
Manish Goregaokar
a993669a40 Rollup merge of #30949 - MrMormon:patch-1, r=alexcrichton
‌ ‌▲
▲‌ ▲
2016-01-17 17:25:48 +05:30
Manish Goregaokar
80e21d1958 Rollup merge of #30943 - alexcrichton:stabilize-1.7, r=aturon
This commit stabilizes and deprecates the FCP (final comment period) APIs for
the upcoming 1.7 beta release. The specific APIs which changed were:

Stabilized

* `Path::strip_prefix` (renamed from `relative_from`)
* `path::StripPrefixError` (new error type returned from `strip_prefix`)
* `Ipv4Addr::is_loopback`
* `Ipv4Addr::is_private`
* `Ipv4Addr::is_link_local`
* `Ipv4Addr::is_multicast`
* `Ipv4Addr::is_broadcast`
* `Ipv4Addr::is_documentation`
* `Ipv6Addr::is_unspecified`
* `Ipv6Addr::is_loopback`
* `Ipv6Addr::is_unique_local`
* `Ipv6Addr::is_multicast`
* `Vec::as_slice`
* `Vec::as_mut_slice`
* `String::as_str`
* `String::as_mut_str`
* `<[T]>::clone_from_slice` - the `usize` return value is removed
* `<[T]>::sort_by_key`
* `i32::checked_rem` (and other signed types)
* `i32::checked_neg` (and other signed types)
* `i32::checked_shl` (and other signed types)
* `i32::checked_shr` (and other signed types)
* `i32::saturating_mul` (and other signed types)
* `i32::overflowing_add` (and other signed types)
* `i32::overflowing_sub` (and other signed types)
* `i32::overflowing_mul` (and other signed types)
* `i32::overflowing_div` (and other signed types)
* `i32::overflowing_rem` (and other signed types)
* `i32::overflowing_neg` (and other signed types)
* `i32::overflowing_shl` (and other signed types)
* `i32::overflowing_shr` (and other signed types)
* `u32::checked_rem` (and other unsigned types)
* `u32::checked_shl` (and other unsigned types)
* `u32::saturating_mul` (and other unsigned types)
* `u32::overflowing_add` (and other unsigned types)
* `u32::overflowing_sub` (and other unsigned types)
* `u32::overflowing_mul` (and other unsigned types)
* `u32::overflowing_div` (and other unsigned types)
* `u32::overflowing_rem` (and other unsigned types)
* `u32::overflowing_neg` (and other unsigned types)
* `u32::overflowing_shl` (and other unsigned types)
* `u32::overflowing_shr` (and other unsigned types)
* `ffi::IntoStringError`
* `CString::into_string`
* `CString::into_bytes`
* `CString::into_bytes_with_nul`
* `From<CString> for Vec<u8>`
* `From<CString> for Vec<u8>`
* `IntoStringError::into_cstring`
* `IntoStringError::utf8_error`
* `Error for IntoStringError`

Deprecated

* `Path::relative_from` - renamed to `strip_prefix`
* `Path::prefix` - use `components().next()` instead
* `os::unix::fs` constants - moved to the `libc` crate
* `fmt::{radix, Radix, RadixFmt}` - not used enough to stabilize
* `IntoCow` - conflicts with `Into` and may come back later
* `i32::{BITS, BYTES}` (and other integers) - not pulling their weight
* `DebugTuple::formatter` - will be removed
* `sync::Semaphore` - not used enough and confused with system semaphores

Closes #23284
cc #27709 (still lots more methods though)
Closes #27712
Closes #27722
Closes #27728
Closes #27735
Closes #27729
Closes #27755
Closes #27782
Closes #27798
2016-01-17 17:25:47 +05:30
Manish Goregaokar
fbf3e96e56 Rollup merge of #30940 - tshepang:extraneous-playpen-whitespace, r=steveklabnik 2016-01-17 17:25:47 +05:30
Manish Goregaokar
48a7651073 Rollup merge of #30938 - dotdash:zst_void, r=eddyb
The only way to get a value for a zero-sized type is `undef`, so
there's really no point in actually having a return type other than
void for such types. Also, while the comment in return_type_is_void
mentioned something about aiding C ABI support, @eddyb correctly
pointed out on IRC that there is no such thing as a zero-sized type in
C. And even with clang, which allows empty structs, those get
translated as void return types as well.

Fixes #28766
2016-01-17 17:25:47 +05:30
bors
0b524edb04 Auto merge of #30931 - oli-obk:trans_disr_newtype, r=arielb1
This is groundwork for #30587 (typestrong constant integrals), but imo it's a change that in itself is good, too, since we don't just juggle `u64`s around anymore.

`ty::Disr` will be changed to a `ConstInt` in #30587
2016-01-17 10:31:47 +00:00
bors
87608746f0 Auto merge of #30928 - sfackler:any-unsized, r=aturon
This is a bit weird since unsized types can't be used in trait objects,
but Any is *also* used as pure marker trait since Reflect isn't stable.
There are many cases (e.g. TypeMap) where all you need is a TypeId.

r? @aturon
2016-01-17 08:40:01 +00:00
bors
88463364bf Auto merge of #30426 - gereeter:btree-rewrite, r=Gankro
Despite being over 700 lines shorter, this implementation should use less memory than the previous one and is faster on at least insertions and iteration, the latter improving approximately 5x.

Technically a [breaking-change] due to removal of deprecated functions.

cc @apasel422 @Gankro @goyox86

Fixes #27865.

<!-- Reviewable:start -->
[<img src="https://reviewable.io/review_button.png" height=40 alt="Review on Reviewable"/>](https://reviewable.io/reviews/rust-lang/rust/30426)
<!-- Reviewable:end -->
2016-01-17 06:47:55 +00:00
Jonathan S
be4128d148 BTreeMap: Add a test for clone 2016-01-16 22:55:56 -06:00
Jonathan S
cd639d8927 Rewrite BTreeMap to use parent pointers. 2016-01-16 21:40:03 -06:00
bors
077f4eeb84 Auto merge of #30567 - steffengy:master, r=alexcrichton
Add support to use functions exported using vectorcall.
This essentially only allows to pass a new LLVM calling convention
from rust to LLVM.

```rust
extern "vectorcall" fn abc(param: c_void);
```

references
----
http://llvm.org/docs/doxygen/html/CallingConv_8h_source.html
https://msdn.microsoft.com/en-us/library/dn375768.aspx
2016-01-16 23:30:30 +00:00
Ulrik Sverdrup
627829bde8 test: Increase resolution of MB/s stat for bench runs close to 1 second
MB/s was based on the number of iterations performed in a second, when
the iteration duration nears 1 second (1e9 ns), the resolution of the
MB/s stat decreases.
2016-01-16 22:58:00 +01:00
bors
1f516dc7c1 Auto merge of #30624 - Ticki:specialization, r=alexcrichton
Part of #30520. Completes #24214
2016-01-16 21:38:39 +00:00
Jonas Tepe
5c62178658 Fixed indent from tabs to spaces 2016-01-16 20:51:55 +01:00
Alex Crichton
9a4f43b9b6 std: Stabilize APIs for the 1.7 release
This commit stabilizes and deprecates the FCP (final comment period) APIs for
the upcoming 1.7 beta release. The specific APIs which changed were:

Stabilized

* `Path::strip_prefix` (renamed from `relative_from`)
* `path::StripPrefixError` (new error type returned from `strip_prefix`)
* `Ipv4Addr::is_loopback`
* `Ipv4Addr::is_private`
* `Ipv4Addr::is_link_local`
* `Ipv4Addr::is_multicast`
* `Ipv4Addr::is_broadcast`
* `Ipv4Addr::is_documentation`
* `Ipv6Addr::is_unspecified`
* `Ipv6Addr::is_loopback`
* `Ipv6Addr::is_unique_local`
* `Ipv6Addr::is_multicast`
* `Vec::as_slice`
* `Vec::as_mut_slice`
* `String::as_str`
* `String::as_mut_str`
* `<[T]>::clone_from_slice` - the `usize` return value is removed
* `<[T]>::sort_by_key`
* `i32::checked_rem` (and other signed types)
* `i32::checked_neg` (and other signed types)
* `i32::checked_shl` (and other signed types)
* `i32::checked_shr` (and other signed types)
* `i32::saturating_mul` (and other signed types)
* `i32::overflowing_add` (and other signed types)
* `i32::overflowing_sub` (and other signed types)
* `i32::overflowing_mul` (and other signed types)
* `i32::overflowing_div` (and other signed types)
* `i32::overflowing_rem` (and other signed types)
* `i32::overflowing_neg` (and other signed types)
* `i32::overflowing_shl` (and other signed types)
* `i32::overflowing_shr` (and other signed types)
* `u32::checked_rem` (and other unsigned types)
* `u32::checked_neg` (and other unsigned types)
* `u32::checked_shl` (and other unsigned types)
* `u32::saturating_mul` (and other unsigned types)
* `u32::overflowing_add` (and other unsigned types)
* `u32::overflowing_sub` (and other unsigned types)
* `u32::overflowing_mul` (and other unsigned types)
* `u32::overflowing_div` (and other unsigned types)
* `u32::overflowing_rem` (and other unsigned types)
* `u32::overflowing_neg` (and other unsigned types)
* `u32::overflowing_shl` (and other unsigned types)
* `u32::overflowing_shr` (and other unsigned types)
* `ffi::IntoStringError`
* `CString::into_string`
* `CString::into_bytes`
* `CString::into_bytes_with_nul`
* `From<CString> for Vec<u8>`
* `From<CString> for Vec<u8>`
* `IntoStringError::into_cstring`
* `IntoStringError::utf8_error`
* `Error for IntoStringError`

Deprecated

* `Path::relative_from` - renamed to `strip_prefix`
* `Path::prefix` - use `components().next()` instead
* `os::unix::fs` constants - moved to the `libc` crate
* `fmt::{radix, Radix, RadixFmt}` - not used enough to stabilize
* `IntoCow` - conflicts with `Into` and may come back later
* `i32::{BITS, BYTES}` (and other integers) - not pulling their weight
* `DebugTuple::formatter` - will be removed
* `sync::Semaphore` - not used enough and confused with system semaphores

Closes #23284
cc #27709 (still lots more methods though)
Closes #27712
Closes #27722
Closes #27728
Closes #27735
Closes #27729
Closes #27755
Closes #27782
Closes #27798
2016-01-16 11:03:10 -08:00
bors
05aeeb314d Auto merge of #30934 - oli-obk:simplify_const_eval, r=alexcrichton
the `None` and the `DefVariant` paths were unused anyway.
2016-01-16 17:57:01 +00:00
bors
c14b615534 Auto merge of #30533 - nikomatsakis:fulfillment-tree, r=aturon
This PR introduces an `ObligationForest` data structure that the fulfillment context can use to track what's going on, instead of the current flat vector. This enables a number of improvements:

1. transactional support, at least for pushing new obligations
2. remove the "errors will be reported" hack -- instead, we only add types to the global cache once their entire subtree has been proven safe. Before, we never knew when this point was reached because we didn't track the subtree.
   - this in turn allows us to limit coinductive reasoning to structural traits, which sidesteps #29859
3. keeping the backtrace should allow for an improved error message, where we give the user full context
    - we can also remove chained obligation causes

This PR is not 100% complete. In particular:

- [x] Currently, types that embed themselves like `struct Foo { f: Foo }` give an overflow when evaluating whether `Foo: Sized`. This is not a very user-friendly error message, and this is a common beginner error. I plan to special-case this scenario, I think.
- [x] I should do some perf. measurements. (Update: 2% regression.)
- [x] More tests targeting #29859
- [ ] The transactional support is not fully integrated, though that should be easy enough.
- [ ] The error messages are not taking advantage of the backtrace.

I'd certainly like to do 1 through 3 before landing, but 4 and 5 could come as separate PRs.

r? @aturon // good way to learn more about this part of the trait system
f? @arielb1 // already knows this part of the trait system :)
2016-01-16 16:03:22 +00:00
Guillaume Gomez
864cd8d58e Fix typo 2016-01-16 16:34:51 +01:00
Oliver 'ker' Schneider
6fef118bc0 use a newtype for the variant discriminant instead of u64 2016-01-16 16:03:09 +01:00
Niko Matsakis
4fbb71fda1 Add regression tests for #29859. However #29859 is not fully fixed. 2016-01-16 09:58:09 -05:00
bors
dda25f2221 Auto merge of #30946 - antonblanchard:powerpc64_merge2, r=alexcrichton
This brings in powerpc64 and powerpc64le support recently added.
2016-01-16 14:11:29 +00:00
Oliver 'ker' Schneider
1aacd9d44f simplify some code 2016-01-16 14:29:20 +01:00
Jonas Tepe
9c5b296dd3 added zst iterator additions to final code 2016-01-16 13:13:44 +01:00
Jonas Tepe
b3f44c1335 Semicolon was at wrong place in let statement 2016-01-16 13:07:46 +01:00
bors
921890c64e Auto merge of #30939 - shepmaster:btreeset-insert-return-value, r=alexcrichton 2016-01-16 12:04:38 +00:00
Niko Matsakis
8c14649ce8 Document ObligationForest better. 2016-01-16 05:22:42 -05:00
Niko Matsakis
0723d6c6ed Pacify tidy. 2016-01-16 05:22:33 -05:00
Niko Matsakis
57c31b2849 Implement a hacky version of the DAG support we ultimately want, leaving
a FIXME for later.
2016-01-16 05:22:33 -05:00
Niko Matsakis
3046ac217f Detect cycles and specialize error reporting for Sized. It is important
to get the `Sized` error usable, since that hits new users
frequently. Further work is needed for the error reporting for non-Sized
cycle cases; those currently just fallback to the old path. Also adjust tests.
2016-01-16 05:22:32 -05:00
Niko Matsakis
4bbe532737 Permit coinductive match only for purely OIBIT backtraces.
Better safe than sorry.
2016-01-16 05:22:32 -05:00
Niko Matsakis
3db82d1a4e Fix bug in new stall checking code, it should consider integer variables
too.
2016-01-16 05:22:32 -05:00
Niko Matsakis
20e088c4e2 fallout from removing the errors_will_be_reported flag 2016-01-16 05:22:32 -05:00
Niko Matsakis
2c3f0123e9 only insert global predicates into the global cache once we've
completely proven them to be true
2016-01-16 05:22:32 -05:00
Niko Matsakis
ecaa1cbc9c enable coinductive reasoning for structural traits, this is
potentially just a stopgap measure
2016-01-16 05:22:32 -05:00
bors
8e12365570 Auto merge of #30935 - ollie27:pad_int, r=alexcrichton
The function expects a value of true for zero but zero is not positive.
2016-01-16 10:12:40 +00:00
bors
83c3b7f5a4 Auto merge of #30930 - oli-obk:fix/30887, r=arielb1
this makes sure the checks run before typeck (which might use the constant or const
function to calculate an array length) and gives prettier error messages in case of for
loops and such (since they aren't expanded yet).

fixes #30887

r? @pnkfelix
2016-01-16 08:20:31 +00:00
Ticki
d026977f25 Make style more uniform, add tests for specialization of .last(), move tests to libcoretest
Remove unused import

Fold nth() method into the match expr
2016-01-16 09:12:09 +01:00
Ticki
15a5e02486 Overide methods in iterator implementation for EscapeDefault, see #24214
Complete the tests
2016-01-16 09:12:08 +01:00
bors
3c490538d8 Auto merge of #30908 - petrochenkov:backtrace, r=alexcrichton
@dhuseby @semarie Please, confirm that all Rust-specific changes in the second commit are still required.
(It would be ideal to have an unpatched copy of libbacktrace straight from the gcc repo.)

Fixes https://github.com/rust-lang/rust/issues/28447

r? @alexcrichton
2016-01-16 05:04:44 +00:00
Joshua Olson
797e6fc41b added link for issue mentioned in readme
‌ ‌ ▲
▲‌ ▲
2016-01-15 20:50:03 -07:00
bors
c42ccb8b49 Auto merge of #30896 - petrochenkov:vkindmeta, r=alexcrichton
Also add tests for use of empty structs in cross-crate scenarios

Some tests are commented out, they depend on fixes from  https://github.com/rust-lang/rust/pull/30882
2016-01-16 03:11:47 +00:00
bors
e7e4ecc522 Auto merge of #30740 - bluss:ascii-is-the-best, r=brson
Add fast path for ASCII in UTF-8 validation

This speeds up the ASCII case (and long stretches of ASCII in otherwise
mixed UTF-8 data) when checking UTF-8 validity.

Benchmark results suggest that on purely ASCII input, we can improve
throughput (megabytes verified / second) by a factor of 13 to 14 (smallish input).
On XML and mostly English language input (en.wikipedia XML dump),
throughput improves by a factor 7 (large input).

On mostly non-ASCII input, performance increases slightly or is the
same.

The UTF-8 validation is rewritten to use indexed access; since all
access is preceded by a (mandatory for validation) length check, bounds
checks are statically elided by LLVM and this formulation is in fact the best
for performance. A previous version had losses due to slice to iterator
conversions.

A large credit to Björn Steinbrink who improved this patch immensely,
writing this second version.

Benchmark results on x86-64 (Sandy Bridge) compiled with -C opt-level=3.

Old code is `regular`, this PR is called `fast`.

Datasets:

- `ascii` is just ASCII (2.5 kB)
- `cyr` is cyrillic script with ascii spaces (5 kB)
- `dewik10` is 10MB of a de.wikipedia XML dump
- `enwik8` is 100MB of an en.wikipedia XML dump
- `jawik10` is 10MB of a ja.wikipedia XML dump

```
test from_utf8_ascii_fast        ... bench:         140 ns/iter (+/- 4) = 18221 MB/s
test from_utf8_ascii_regular     ... bench:       1,932 ns/iter (+/- 19) = 1320 MB/s
test from_utf8_cyr_fast          ... bench:      10,025 ns/iter (+/- 245) = 511 MB/s
test from_utf8_cyr_regular       ... bench:      10,944 ns/iter (+/- 795) = 468 MB/s
test from_utf8_dewik10_fast      ... bench:   6,017,909 ns/iter (+/- 105,755) = 1740 MB/s
test from_utf8_dewik10_regular   ... bench:  11,669,493 ns/iter (+/- 264,045) = 891 MB/s
test from_utf8_enwik8_fast       ... bench:  14,085,692 ns/iter (+/- 1,643,316) = 7000 MB/s
test from_utf8_enwik8_regular    ... bench:  93,657,410 ns/iter (+/- 5,353,353) = 1000 MB/s
test from_utf8_jawik10_fast      ... bench:  29,154,073 ns/iter (+/- 4,659,534) = 340 MB/s
test from_utf8_jawik10_regular   ... bench:  29,112,917 ns/iter (+/- 2,475,123) = 340 MB/s
```

Co-authored-by: Björn Steinbrink <bsteinbr@gmail.com>
2016-01-16 01:18:48 +00:00
Anton Blanchard
745e30fc6b Update libc
This brings in powerpc64 and powerpc64le support recently added.
2016-01-15 23:29:05 +00:00
bors
cee9463d24 Auto merge of #30878 - brson:raw-pointer-derive, r=brson
This adds back the raw_pointer_derive lint as a 'removed' lint, so that its removal does not cause errors (#30346) but warnings.

In the process I discovered regressions in the code for renamed and removed lints, which didn't appear to have any tests. The addition of a second lint pass (ast vs. hir) meant that attributes were being inspected twice, renamed and removed warnings printed twice. I restructured the code so these tests are only done once and added tests. Unfortunately it makes the patch more complicated for the needed beta backport.

r? @nikomatsakis
2016-01-15 23:26:38 +00:00
bors
683af0d9e0 Auto merge of #30446 - michaelwu:associated-const-type-params-pt1, r=nikomatsakis
This provides limited support for using associated consts on type parameters. It generally works on things that can be figured out at trans time. This doesn't work for array lengths or match arms. I have another patch to make it work in const expressions.

CC @eddyb @nikomatsakis
2016-01-15 21:33:58 +00:00
bors
f4befa6712 Auto merge of #30890 - nagisa:mir-tuple-adts, r=nikomatsakis
This PR changes translation of tuple-like ADTs from being calls to being proper aggregates. This change is done in hope to make code generation better. Namely, now we can avoid:

1. Call overhead;
2. Generating landingpads in presence of cleanups (we know for sure constructing ADTs can’t panic);
3. And probably much more, gaining better MIR introspectablilty.

Along with that a few serious deficiencies with translation of ADTs and switches have been fixed as well (commits 2 and 3).

r? @nikomatsakis
cc @tsion
2016-01-15 19:44:33 +00:00