Commit Graph

60544 Commits

Author SHA1 Message Date
bors
c07a6ae77c Auto merge of #37972 - bluss:iter-find-is-on-a-roll, r=sfackler
Improve the slice iterator's searching methods

Improve all, any, find, position, rposition by explicitly unrolling the loop for the slice iterators.

- Introduce a few extension methods and functions for raw pointers make the new code easy to express
- Introduce helper methods `search_while, rsearch_while` that generalize all the searching methods

LLVM doesn't unroll the loop in `.find()` by default (clang is the same), so performance benefits a lot from explicit unrolling here. An iterator method without conditional exits (like `.fold()`) does not need this on the other hand.

One of the raw pointer extension methods is `fn post_inc(&mut self) -> Self` which is the rustic equivalent of “`ptr++`”, and it is a nice way to express the raw pointer loop (see commit 3).

Specific development notes about `search_while`: I tried both computing an end pointer "rounded" to 4, as well as the `ptrdistance >= 4` loop condition, ptrdistance was better. I tried handling the last 0-3 elements unrolled or with a while loop, the loop was better.
2017-01-17 21:52:03 +00:00
bors
bd8e9b0c82 Auto merge of #39109 - michaelwoerister:incr-comp-cache-cleanup, r=nikomatsakis
incr.comp.: Delete orphaned work-products.

The new partitioning scheme uncovered a hole in our incr. comp. cache directory garbage collection. So far, we relied on unneeded work products being deleted during the initial cache invalidation phase. However, we the new scheme, we get object files/work products that only contain code from upstream crates. Sometimes this code is not needed anymore (because all callers have been removed from the source) but because nothing that actually influences the contents of these work products had changed, we never deleted them from disk.

r? @nikomatsakis
2017-01-17 18:22:20 +00:00
bors
aedebfe77d Auto merge of #39100 - Mark-Simulacrum:fix-stage1, r=eddyb
Fix stage 1 tests broken because i128 doesn't work in stage 1

Broken by https://github.com/rust-lang/rust/pull/38992.
2017-01-17 14:38:29 +00:00
bors
a167c042ab Auto merge of #39110 - petrochenkov:sum, r=eddyb
Merge ObjectSum and PolyTraitRef in AST/HIR + some other refactoring

`ObjectSum` and `PolyTraitRef` are the same thing (list of bounds), they exist separately only due to parser quirks. The second commit merges them.

The first commit replaces `Path` with `Ty` in (not yet supported) equality predicates. They are parsed as types anyway and arbitrary types can always be disguised as paths using aliases, so this doesn't add any new functionality.

The third commit uses `Vec` instead of `P<[T]>` in AST. AST is not immutable like HIR and `Vec`s are more convenient for it, unnecessary conversions are also avoided.

The last commit renames `parse_ty_sum` (which is used for parsing types in general) into `parse_ty`, and renames `parse_ty` (which is used restricted contexts where `+` is not permitted due to operator priorities or other reasons) into `parse_ty_no_plus`.

This is the first part of https://github.com/rust-lang/rust/issues/39085#issuecomment-272743755 and https://github.com/rust-lang/rust/issues/39080 focused on data changes and mechanical renaming, I'll submit a PR with parser changes a bit later.

r? @eddyb
2017-01-17 12:31:15 +00:00
bors
0825c96b14 Auto merge of #39095 - nagisa:fix-ub-in-testhelp, r=alexcrichton
Fix UB in test helpers

Macro expansion producing defined has undefined behavior in C/C++.
2017-01-17 10:10:32 +00:00
bors
7dfcac55bb Auto merge of #39050 - alexcrichton:travis-nightly, r=brson
travis: Pass --release-channel=nightly on deploy

This commit passes the `--release-channel=nightly` flag to all images which have
the `DEPLOY` flag set. This means that we'll name artifacts and the compiler
appropriately.

This reworks a bit how arguments are passed, but for now doesn't change what's
already being passed. Eventually we'll want to avoid enabling debug assertions
and llvm assertions for *all* releases, but I figure we can tackle that a little
bit more down the road.
2017-01-17 08:01:04 +00:00
Vadim Petrochenkov
66ef5f2bb5 Rename ObjectSum into TraitObject in AST/HIR 2017-01-17 10:41:44 +03:00
Alex Crichton
0618580235 travis: Pass --release-channel=nightly on deploy
This commit passes the `--release-channel=nightly` flag to all images which have
the `DEPLOY` flag set. This means that we'll name artifacts and the compiler
appropriately.

This reworks a bit how arguments are passed, but for now doesn't change what's
already being passed. Eventually we'll want to avoid enabling debug assertions
and llvm assertions for *all* releases, but I figure we can tackle that a little
bit more down the road.
2017-01-16 22:26:21 -08:00
bors
31dee37a15 Auto merge of #39090 - solson:exprkind-array, r=eddyb
Rename ExprKind::Vec to Array in HIR and HAIR.

This is a clearer name since they represent `[a, b, c]` array literals.

r? @eddyb
2017-01-17 05:55:56 +00:00
bors
32da85148a Auto merge of #39087 - nrc:qquote-empty-delim, r=jseyfried
proc macros/qquote: Handle empty delimited tokens

r? @jseyfried
2017-01-17 03:29:42 +00:00
bors
4ce7accaa7 Auto merge of #38949 - GuillaumeGomez:fix_linker, r=nagisa
Fix linker failure on windows

Fixes #38933.

r? @ollie27
2017-01-17 00:50:52 +00:00
Vadim Petrochenkov
869b81646d syntax: Rename parse_ty -> parse_ty_no_plus, parse_ty_sum -> parse_ty 2017-01-17 02:13:41 +03:00
Vadim Petrochenkov
03620dba25 Use resizable Vec instead of P<[T]> in AST 2017-01-17 01:54:59 +03:00
Michael Woerister
fe025d4345 incr.comp.: Delete orphaned work-products. 2017-01-16 17:54:20 -05:00
Vadim Petrochenkov
2efe865d22 AST/HIR: Merge ObjectSum and PolyTraitRef 2017-01-17 01:52:47 +03:00
bors
c2b19c109e Auto merge of #39108 - GuillaumeGomez:rollup, r=GuillaumeGomez
Rollup of 6 pull requests

- Successful merges: #38247, #39028, #39065, #39084, #39105, #39106
- Failed merges:
2017-01-16 22:21:51 +00:00
Guillaume Gomez
04e74cefee Rollup merge of #39106 - istankovic:patch-2, r=GuillaumeGomez
libcollections: btree/set: fix a typo
2017-01-16 22:48:26 +01:00
Guillaume Gomez
a9300ccdff Rollup merge of #39105 - istankovic:patch-1, r=sfackler
libcollections: btree/map: fix typos
2017-01-16 22:48:25 +01:00
Guillaume Gomez
630b9e10c4 Rollup merge of #39084 - sphela:book-update-patterns, r=steveklabnik
An update to patterns documentation

As it is written the current pattern page creates a lot of confusion, even for someone with previous rust experience. It's so hard because it introduces an entirely new language feature without explaining. Someone could update it within the span of a few minutes by just explaining the newly introduced feature.

```rust
match c {
    x => println!("x: {} c: {}", x, c),
}
```
No where in the book up to this point has it explained that identifiers match patterns with just a name create an irrefutable pattern. The page uses this feature without explanation, it just assumes that readers would immediately understand it. To confuse the issue even further the topic uses this feature to explain shadowing, placing two x's from different scopes and different meanings without ever explaining why there is shadowing.

What follows comes across as utterly nonsensical given everything the reader would know about Rust about this point:

```rust
the result:
x: c c: c
x: x
```

x is c? What? Yes even if you understand that x here is not the x in the previous scope why would x equal 'c' here? What previous chapter explained this? The previous chapter on 'matching' only mentions the catch all '_' and never in any shape or form mentioned that a name here creates an irrefutable pattern and binds a value.

There are numerous examples of people not understanding this section, not finding answers and looking for them online about `x: c c: c`:

https://github.com/rust-lang/book/issues/316

https://stackoverflow.com/questions/35563141/match-shadowing-example-in-the-patterns-section-of-the-rust-book-is-very-perplex

https://users.rust-lang.org/t/confusion-about-match-and-patterns/3937

https://www.bountysource.com/issues/38852461-question-on-patterns-section-shadowing-example-existing-book

And a [google search for `rust x: c c: c`](https://www.google.com/search?q=rust+%22x:+c+c:+c%22) finds many more people being tripped up, including people who speak a language other than English. I am confident that this page has resulted in questions on the irc channel more than once. Given rust already has a pretty big learning curve I recommend this be fixed.

I was asked to create PR from where I made this same case in the [rust book repository issue](https://github.com/rust-lang/book/issues/316) (I didn't realize this was a separate project).
2017-01-16 22:48:24 +01:00
Guillaume Gomez
04921398b6 Rollup merge of #39065 - frewsxcv:libstd-os-unix-ffi-docs, r=GuillaumeGomez
Add doc examples & description in `std::os::unix::ffi`.

None
2017-01-16 22:48:23 +01:00
Guillaume Gomez
c382ff8977 Rollup merge of #39028 - frewsxcv:libstd-env-docs, r=brson
Minor improvements to docs in std::env structures/functions.

* Call functions "functions" instead of "methods".
* Link structures to their constructor functions
* Add other misc. documentation links
2017-01-16 22:48:22 +01:00
Guillaume Gomez
1293b793dd Rollup merge of #38247 - federicomenaquintero:assert-eq-argument-docs, r=GuillaumeGomez
Document the optional extra arguments to assert_eq!() / assert_ne!()

And clarify that those arguments in assert!() are in fact formattable.
2017-01-16 22:48:21 +01:00
Ivan Stankovic
2ac4fe12f3 libcollections: btree/set: fix a typo 2017-01-16 21:26:43 +01:00
Ivan Stankovic
b50fb240be libcollections: btree/map: fix typos 2017-01-16 21:24:18 +01:00
bors
45b273af4a Auto merge of #39094 - nagisa:i128-fix-endianness, r=eddyb
(Shot at) Fix endian bugs in i128 intrinsic impls

Attempt to fix the endianness issues on big-endian machines such as power pc. Could not test if it actually makes stuff work on the powerpc, because setting up cross-compiler for ppc seems to be nigh-impossible on arch.
2017-01-16 20:23:09 +00:00
Mark Simulacrum
f88f660af4 Fix stage 0 and 1 tests broken because i128 doesn't work in stages less than 2
Broken by https://github.com/rust-lang/rust/pull/38992.
2017-01-16 12:42:43 -07:00
Vadim Petrochenkov
828404684b AST/HIR: Replace Path with Type in WhereEqPredicate 2017-01-16 21:32:13 +03:00
bors
2d0baa71b9 Auto merge of #39102 - alexcrichton:netbsd-mirror, r=alexcrichton
travis: Mirror some NetBSD artifacts

This mirrors a few artifacts that have been flaky to download recently
on our own S3 bucket, which has historically been more reliable.

Closes #39097
2017-01-16 18:08:59 +00:00
Alex Crichton
00d51ee822 travis: Mirror some NetBSD artifacts
This mirrors a few artifacts that have been flaky to download recently
on our own S3 bucket, which has historically been more reliable.

Closes #39097
2017-01-16 10:06:54 -08:00
bors
47410b23aa Auto merge of #39076 - ollie27:rustdoc_stab_prim, r=GuillaumeGomez
rustdoc: Give primitive types stability attributes

This is especially important for i128/u128 to make it clear they are
unstable in the docs.
2017-01-16 13:22:29 +00:00
bors
11ad6fe52a Auto merge of #39072 - radix:patch-1, r=GuillaumeGomez
Minor improvement to strange grammar in E0525

Hi, I just ran into this error from rustc, and it had some strange grammar, so I cleaned it up a bit.
2017-01-16 11:17:34 +00:00
Simonas Kazlauskas
5add9b93d4 Fix UB in test helpers
Macro expansion producing defined has undefined behavior in C/C++.
2017-01-16 11:46:00 +02:00
Simonas Kazlauskas
c032bbf95e Fix endian bugs in i128 intrinsic impls 2017-01-16 11:32:38 +02:00
bors
14bfdfdff5 Auto merge of #39071 - est31:master, r=GuillaumeGomez
Mark safe_suggestion and pushpop_unsafe as removed in feature_gate.rs

This removes two features from feature_gate.rs: `safe_suggestion` and `pushpop_unsafe`. Both had been removed in other places already, but were forgotten to be removed from feature_gate.rs.

* `safe_suggestion` was added in commit 164f0105bb and then removed again in commit c11fe553df both in the same PR #38099.

* `pushpop_unsafe` was added in commit 1829fa5199 and removed again in commit d399098fd8

Removes two elements from the whitelist of non gate tested unstable lang features (issue #39059).
2017-01-16 09:16:44 +00:00
Scott Olson
a9f8f98caa Rename ExprKind::Vec to Array in HIR and HAIR.
This is a clearer name since they represent [a, b, c] array literals.
2017-01-16 00:45:51 -08:00
bors
daf4c06351 Auto merge of #39069 - GuillaumeGomez:missing_blank_space, r=Manishearth
Fix missing blank space issue

r? @Manishearth
2017-01-16 07:18:48 +00:00
bors
3dcb288420 Auto merge of #38806 - comex:lint-attr-fix, r=nrc
Fix lint attributes on non-item nodes.

Currently, late lint checking uses two HIR visitors: LateContext and
IdVisitor.  IdVisitor only overrides visit_id, and for each node searches
for builtin lints previously added to the session; LateContext overrides
a number of methods, and runs late lints.  When LateContext encounters an
item, it first has IdVisitor walk everything in it except nested items
(OnlyBodies), then recurses into it itself - i.e. there are two separate
walks.

Aside from apparently being unnecessary, this separation prevents lint
attributes (allow/deny/warn) on non-item HIR nodes from working
properly.  Test case:

```rust
// generates warning without this change
fn main() { #[allow(unreachable_code)] loop { break; break; } }
```

LateContext contains logic to merge attributes seen into the current lint
settings while walking (with_lint_attrs), but IdVisitor does not.  So
such attributes will affect late lints (because they are called from
LateContext), and if the node contains any items within it, they will
affect builtin lints within those items (because that IdVisitor is run
while LateContext is within the attributed node), but otherwise the
attributes will be ignored for builtin lints.

This change simply removes IdVisitor and moves its visit_id into
LateContext itself.  Hopefully this doesn't break anything...

Also added walk calls to visit_lifetime and visit_lifetime_def
respectively, so visit_lifetime_def will recurse into the lifetime and
visit_lifetime will recurse into the name.  In principle this could
confuse lint plugins.  This is "necessary" because walk_lifetime calls
visit_id on the lifetime; of course, an alternative would be directly
calling visit_id (which would require manually iterating over the
lifetimes in visit_lifetime_def), but that seems less clean.
2017-01-16 05:17:39 +00:00
Nick Cameron
054199766c proc macros/qquote: Handle empty delimited tokens 2017-01-16 13:54:36 +13:00
bors
ff591b6dc0 Auto merge of #39042 - alexcrichton:upload-more, r=brson
travis: Expand dist builder coverage

This commit adds six new travis matrix entires for doing cross-compiled
distribution builds of the compiler. The support added in #38731 allows us to
quickly compile a complete suite of distribution artifacts for cross-compiled
platforms, and currently each matrix entry (when fully cached) clocks in around
an hour to finish. Note that a full test run typically takes about two hours
right now.

With further optimizations coming down the pike in #39026 this commit also
starts doubling up cross-compiled distribution builders on each matrix entry. We
initially planned to do one build per entry, but it's looking like we may be
able to get by with more than one in each entry. Depending on how long these
builds take we may even be able to up it to three, but we'll start with two
first.

This commit then completes the suite of cross-compiled compilers that we're
going to compile, adding it for a whole litany of platforms detailed in the
changes to the docker files here. The existing `cross` image is also trimmed
down quite a bit to avoid duplicate work, and we'll eventually provision it for
far more cross compilation as well.

Note that the gcc toolchains installed to compile most of these compilers are
inappropriate for actualy distribution. The glibc they pull in is much newer
than we'd like, so before we turn nightlies off we'll need to tweak these docker
files to custom build toolchains like the current `linux-cross` docker image
does.
2017-01-15 23:49:24 +00:00
bors
0ef85a6b1c Auto merge of #38610 - djzin:master, r=sfackler
Implementation of plan in issue #27787 for btree_range

Still some ergonomics to be worked on, the ::<str,_> is particularly unsightly
2017-01-15 21:44:51 +00:00
Bjorn Tipling
0dad9dcf9e An update to patterns documentation
As it is written it creates a lot of confusion.
2017-01-15 12:27:41 -08:00
Alex Crichton
a6d88b023a travis: Expand dist builder coverage
This commit adds six new travis matrix entires for doing cross-compiled
distribution builds of the compiler. The support added in #38731 allows us to
quickly compile a complete suite of distribution artifacts for cross-compiled
platforms, and currently each matrix entry (when fully cached) clocks in around
an hour to finish. Note that a full test run typically takes about two hours
right now.

With further optimizations coming down the pike in #39026 this commit also
starts doubling up cross-compiled distribution builders on each matrix entry. We
initially planned to do one build per entry, but it's looking like we may be
able to get by with more than one in each entry. Depending on how long these
builds take we may even be able to up it to three, but we'll start with two
first.

This commit then completes the suite of cross-compiled compilers that we're
going to compile, adding it for a whole litany of platforms detailed in the
changes to the docker files here. The existing `cross` image is also trimmed
down quite a bit to avoid duplicate work, and we'll eventually provision it for
far more cross compilation as well.

Note that the gcc toolchains installed to compile most of these compilers are
inappropriate for actualy distribution. The glibc they pull in is much newer
than we'd like, so before we turn nightlies off we'll need to tweak these docker
files to custom build toolchains like the current `linux-cross` docker image
does.
2017-01-15 10:14:43 -08:00
Guillaume Gomez
b7678808af Fix missing blank space issue 2017-01-15 18:38:00 +01:00
bors
c21f73e2db Auto merge of #39063 - ruuda:covered-switch, r=alexcrichton
Fix covered-switch-default warnings in RustWrapper

These switch statements cover all possible values, so the default case is dead code (it contains an `llvm_unreachable anyway`), triggering a `-Wcovered-switch-default` warning that pollutes the build output. Moving the unreachable after the switch resolves these warnings.

r? @rkruppe
2017-01-15 15:03:10 +00:00
bors
20ba64d2b4 Auto merge of #39055 - aidanhs:aphs-deinit-before-init, r=alexcrichton
If submodule init fails, try from scratch

See #39051

I wonder if the cause could be some strange not-quite-checked-out state in a submodule. Try and fix this by force deinitialising everything before initialising (this will not throw away downloaded objects, git will skip them on the next attempt at cloning).

r? @alexcrichton
2017-01-15 13:00:49 +00:00
bors
7a526ca05a Auto merge of #39052 - alexcrichton:fix-rebuild, r=brson
rustbuild: Skip the build_helper crate in tests

I've been noticing some spurious recompiles of the final stage on Travis lately
and in debugging them I found a case where we were a little to eager to update
a stamp file due to the build_helper library being introduced during the testing
phase.

Part of the rustbuild system detects when libstd is recompiled and automatically
cleans out future directories to ensure that dirtyness propagation works. To do
this rustbuild doesn't know the artifact name of the standard library so it just
probes everything in the target directory, looking to see if anything changed.

The problem here happened where:

* First, rustbuild would compile everything (a normal build)
* Next, rustbuild would run all tests
* During testing, the libbuild_helper library was introduced into the target
  directory, making it look like a change happened because a file is newer
  than the newest was before
* Detecting a change, the next compilation would then cause rustbuild to clean
  out old artifacts and recompile everything again.

This commit fixes this problem by correcting rustbuild to just not test the
build_helper crate at all. This crate doesn't have any unit tests, nor is it
intended to. That way the target directories should stay the same throughout
testing after a previous build.
2017-01-15 11:03:48 +00:00
Oliver Middleton
f48f3d7584 rustdoc: Give primitive types stability attributes
This is especially important for i128/u128 to make it clear they are
unstable in the docs.
2017-01-15 09:08:29 +00:00
bors
d274e554ad Auto merge of #39045 - redox-os:process_try_wait, r=brson
Add try_wait to Redox process

This implements Process::try_wait on Redox
2017-01-15 08:01:19 +00:00
bors
4f0508af90 Auto merge of #39040 - estebank:relevant-impl-multiline, r=nikomatsakis
Use multiline Diagnostic for "relevant impl" list

Provide the following output:

```
error[E0277]: the trait bound `Bar: Foo<usize>` is not satisfied
  --> $DIR/issue-21659-show-relevant-trait-impls-2.rs:38:8
   |
38 |     f1.foo(1usize);
   |        ^^^ the trait `Foo<usize>` is not implemented for `Bar`
   |
   = help: the following implementations were found:
             <Bar as Foo<i8>>
             <Bar as Foo<i16>>
             <Bar as Foo<i32>>
             <Bar as Foo<u8>>
           and 2 others

error: aborting due to previous error
```

instead of

```
error[E0277]: the trait bound `Bar: Foo<usize>` is not satisfied
  --> $DIR/issue-21659-show-relevant-trait-impls-2.rs:38:8
   |
38 |     f1.foo(1usize);
   |        ^^^ the trait `Foo<usize>` is not implemented for `Bar`
   |
   = help: the following implementations were found:
   = help:   <Bar as Foo<i8>>
   = help:   <Bar as Foo<i16>>
   = help:   <Bar as Foo<i32>>
   = help:   <Bar as Foo<u8>>
   = help: and 2 others

error: aborting due to previous error
```
2017-01-15 05:48:34 +00:00
Christopher Armstrong
ac321a792a "where it didn't" -> "but didn't" 2017-01-14 22:00:04 -06:00