Commit Graph

62520 Commits

Author SHA1 Message Date
Jörg Thalheim
2cf686f2cd
Implement AsRawFd/IntoRawFd for RawFd
This is useful to build os abstraction like the nix crate does.
It allows to define functions, which accepts generic arguments
of data structures convertible to RawFd, including RawFd itself.
For example:

  fn write<FD: AsRawFd>(fd: FD, buf: &[u8]) -> Result<usize>

instead of:

  fn write(fd: RawFd, buf: &[u8]) -> Result<usize>
  write(foo.as_raw_fd(), buf);
2017-03-26 19:14:03 +02:00
bors
7846dbe0c8 Auto merge of #40826 - frewsxcv:rollup, r=frewsxcv
Rollup of 7 pull requests

- Successful merges: #40642, #40734, #40740, #40771, #40807, #40820, #40821
- Failed merges:
2017-03-26 14:04:25 +00:00
bors
bcfd5c48b7 Auto merge of #40501 - jseyfried:shadow_builtin_macros, r=nrc
Allow `use` macro imports to shadow global macros

Terminology:
 - global scope: builtin macros, macros from the prelude, `#[macro_use]`, or `#![plugin(..)]`.
 - legacy scope: crate-local `macro_rules!`.
 - modern scope: `use` macro imports, `macro` (once implemented).

Today, the legacy scope can shadow the global scope (modulo RFC 1560 expanded shadowing restrictions). However, the modern scope cannot shadow or be shadowed by either the global or legacy scopes, leading to ambiguity errors.

This PR allows the modern scope to shadow the global scope (subject to some restrictions).
More specifically, a name in the global scope is as shadowable as a glob import in the module `self`. In other words, we imagine a special, implicit glob import in each module item:
```rust
mod foo {
    #[lexical_only] // Not accessible via `foo::<name>`, like pre-RFC 1560 `use` imports.
    #[shadowable_by_legacy_scope] // for back-compat
    use <global_macros>::*;
}
```

r? @nrc
2017-03-26 11:45:13 +00:00
bors
7dd4e2db78 Auto merge of #40347 - alexcrichton:rm-liblog, r=brson
Remove internal liblog

This commit deletes the internal liblog in favor of the implementation that
lives on crates.io. Similarly it's also setting a convention for adding crates
to the compiler. The main restriction right now is that we want compiler
implementation details to be unreachable from normal Rust code (e.g. requires a
feature), and by default everything in the sysroot is reachable via `extern
crate`.

The proposal here is to require that crates pulled in have these lines in their
`src/lib.rs`:

    #![cfg_attr(rustbuild, feature(staged_api, rustc_private))]
    #![cfg_attr(rustbuild, unstable(feature = "rustc_private", issue = "27812"))]

This'll mean that by default they're not using these attributes but when
compiled as part of the compiler they do a few things:

* Mark themselves as entirely unstable via the `staged_api` feature and the
  `#![unstable]` attribute.
* Allow usage of other unstable crates via `feature(rustc_private)` which is
  required if the crate relies on any other crates to compile (other than std).
2017-03-26 04:26:22 +00:00
bors
0f5ddb953a Auto merge of #40809 - alexcrichton:update-sccache-again, r=alexcrichton
travis: Update sccache again

Looks like the last version was built with mio 0.6.5 which now has known bugs
against it. This build includes mio 0.6.6
2017-03-26 01:33:39 +00:00
bors
0e4b4eb6ab Auto merge of #40821 - arielb1:fix-emscripten, r=TimNN
try to fix the build on emscripten

The "upstream" emscripten tar.gz now extracts to `emsdk-portable` instead of `emsdk_portable`, breaking our CI. It might be better to vendor a specific version of emscripten instead of using the latest, but I could not find a good way of doing that.

r? @alexcrichton
2017-03-25 22:33:29 +00:00
Corey Farwell
dc52625d61 Rollup merge of #40821 - arielb1:fix-emscripten, r=TimNN
try to fix the build on emscripten

The "upstream" emscripten tar.gz now extracts to `emsdk-portable` instead of `emsdk_portable`, breaking our CI. It might be better to vendor a specific version of emscripten instead of using the latest, but I could not find a good way of doing that.

r? @alexcrichton
2017-03-25 09:30:34 -07:00
Corey Farwell
fbcb370fe8 Rollup merge of #40820 - irfanhudda:fix-typo-algorithm, r=BurntSushi
Fix typo in dec2flt/algorithm.rs
2017-03-25 09:30:33 -07:00
Corey Farwell
2bdbcb0618 Rollup merge of #40807 - stjepang:optimize-insertion-sort, r=alexcrichton
Optimize insertion sort

This change slightly changes the main iteration loop so that LLVM can optimize it more efficiently.

Benchmark:

```
name                                   before ns/iter   after ns/iter    diff ns/iter   diff %
slice::sort_unstable_small_ascending   39 (2051 MB/s)   38 (2105 MB/s)             -1   -2.56%
slice::sort_unstable_small_big_random  579 (2210 MB/s)  575 (2226 MB/s)            -4   -0.69%
slice::sort_unstable_small_descending  80 (1000 MB/s)   70 (1142 MB/s)            -10  -12.50%
slice::sort_unstable_small_random      396 (202 MB/s)   386                       -10   -2.53%
```

The benchmark is not a fluke. I can see that performance on `small_descending` is consistently better after this change. I'm not 100% sure why this makes things faster, but my guess would be that `v.len()+1` to the compiler looks like it could in theory overflow.
2017-03-25 09:30:32 -07:00
Corey Farwell
22f914a09a Rollup merge of #40771 - nikomatsakis:issue-40746-privacy-access-levels, r=eddyb
"on-demandify" privacy and access levels

r? @eddyb
cc @cramertj https://github.com/rust-lang/rust/issues/40746
2017-03-25 09:30:31 -07:00
Corey Farwell
03d54a4f06 Rollup merge of #40740 - shepmaster:inclusive-range-unstable-doc, r=steveklabnik
Basic documentation for inclusive range syntax

Done so that we can remove mention of this from the stable documentation ⚠️.
2017-03-25 09:30:30 -07:00
Corey Farwell
2673b03d65 Rollup merge of #40734 - adamransom:fix/40661, r=jseyfried
Add warning for use of lifetime parameter with 'static bound

Previously a `'static` lifetime bound would result in an `undeclared lifetime` error when compiling, even though it could be considered valid.

However, it is unnecessary to use it as a lifetime bound so we present the user with a warning instead and suggest using the `'static` lifetime directly, in place of the lifetime parameter. We can change this to an error (or warning with lint) if that's decided to be more appropriate.

Example output:
```
warning: unnecessary lifetime parameter `'a`
 --> ../static-lifetime-bound.rs:3:10
  |
3 | fn f<'a: 'static>(val: &'a i32) {
  |      ^^^^^^^^^^^
  |
  = help: you can use the `'static` lifetime directly, in place `'a`
```

Fixes #40661

r? @jseyfried
2017-03-25 09:30:29 -07:00
Corey Farwell
f43c336e74 Rollup merge of #40642 - frewsxcv:io-bufread-doc-examples, r=GuillaumeGomez
Rewrite `io::BufRead` doc examples to better demonstrate behaviors.

Prior to this commit, most of the `BufRead` examples used `StdinLock` to
demonstrate how certain `BufRead` methods worked. Using `StdinLock` is
not ideal since:

* Relying on run-time data means we can't show concrete examples of how
  these methods work up-front. The user is required to run them in order
  to see how they behave.
* If the user tries to run an example in the playpen, it won't work
  because the playpen doesn't support user input to stdin.
2017-03-25 09:30:28 -07:00
Tim Neumann
935d84a272 fix permissions of emsdk_portable 2017-03-25 17:22:07 +01:00
Ariel Ben-Yehuda
ca85c400da travis: try to fix the build on emscripten
The emsdk-portable .tar.gz now extracts to emsdk-portable instead of
emsdk_portable. Handle that.
2017-03-25 17:36:54 +03:00
Irfan Hudda
5d9d652e0f Fix typo in dec2flt/algorithm.rs 2017-03-25 16:21:08 +05:30
Alex Crichton
bff332e0a2 travis: Update sccache again
Looks like the last version was built with mio 0.6.5 which now has known bugs
against it. This build includes mio 0.6.6
2017-03-24 19:00:35 -07:00
Adam Ransom
e7949d0013 Warn when using a 'static lifetime bound
Previously a `'static` lifetime bound would result in an `undeclared
lifetime` error when compiling, even though it could be considered
valid.

However, it is unnecessary to use it as a lifetime bound so we present
the user with a warning instead and suggest using the `'static` lifetime
directly, in place of the lifetime parameter.
2017-03-25 10:47:19 +09:00
bors
49c67bd632 Auto merge of #40806 - frewsxcv:rollup, r=frewsxcv
Rollup of 8 pull requests

- Successful merges: #40567, #40602, #40636, #40739, #40756, #40790, #40794, #40803
- Failed merges:
2017-03-24 23:46:45 +00:00
Stjepan Glavina
2c816f7fb6 Optimize insertion sort
This change slightly changes the main iteration loop so that LLVM can
optimize it more efficiently.

Benchmark:

name                                   before ns/iter   after ns/iter    diff ns/iter   diff %
slice::sort_unstable_small_ascending   39 (2051 MB/s)   38 (2105 MB/s)             -1   -2.56%
slice::sort_unstable_small_big_random  579 (2210 MB/s)  575 (2226 MB/s)            -4   -0.69%
slice::sort_unstable_small_descending  80 (1000 MB/s)   70 (1142 MB/s)            -10  -12.50%
slice::sort_unstable_small_random      396 (202 MB/s)   386                       -10   -2.53%
2017-03-25 00:32:15 +01:00
Corey Farwell
6cd46603a4 Rollup merge of #40803 - lukaramu:contributing-docs, r=steveklabnik
Update CONTRIBUTING.md regarding documentation contributions

Changed link to documentation issues from A-docs to T-doc as this has just been migrated.
Added a link to the documentation style guidelines in RFC 1574 (I've linked to [Appendix A][1] specifically since that's the combined version).

r? @steveklabnik

[1]: https://github.com/rust-lang/rfcs/blob/master/text/1574-more-api-documentation-conventions.md#appendix-a-full-conventions-text
2017-03-24 18:13:16 -05:00
Corey Farwell
0566e13ed4 Rollup merge of #40794 - s3rvac:fix-formatting-in-command-envs-docs, r=steveklabnik
Fix formatting in the docs for std::process::Command::envs()

An empty line between the *Basic usage:* text and the example is required to properly format the code. Without the empty line, the example is not formatted as code.

[Here](https://doc.rust-lang.org/std/process/struct.Command.html#method.envs) you can see the current (improper) formatting.
2017-03-24 18:13:15 -05:00
Corey Farwell
eb6f09ce24 Rollup merge of #40790 - stepancheg:btreemap-drop, r=alexcrichton
Unnecessary iteration in BTreeMap::drop

`IntoIter::drop` already iterates.
2017-03-24 18:13:14 -05:00
Corey Farwell
433c0b70ce Rollup merge of #40756 - stjepang:fix-pdqsort-link, r=steveklabnik
Fix markdown links to pdqsort

r? @alexcrichton
2017-03-24 18:13:13 -05:00
Corey Farwell
dd9e5892f4 Rollup merge of #40739 - cuviper:hash-rev-drop, r=arthurprs
Simplify hash table drops

This replaces the `std::collections:#️⃣:table::RevMoveBuckets`
iterator with a simpler `while` loop.  This iterator was only used for
dropping the remaining elements of a `RawTable`, so instead we can just
loop through directly and drop them in place.

This should be functionally equivalent to the former code, but a little
easier to read.  I was hoping it might have some performance benefit
too, but it seems the optimizer was already good enough to see through
the iterator -- the generated code is nearly the same.  Maybe it will
still help if an element type has more complicated drop code.
2017-03-24 18:13:12 -05:00
Corey Farwell
b561d2b530 Rollup merge of #40636 - nikomatsakis:revert-39485, r=eddyb
Revert #39485, fixing type-inference regressions

This reverts PR #39485, which should fix the immediate regressions. Eventually I'd like to land https://github.com/rust-lang/rust/pull/40224 -- or some variant of it -- which revisits the question fo dead-code and inference.

r? @eddyb
cc @canndrew
2017-03-24 18:13:11 -05:00
Corey Farwell
6cf5988651 Rollup merge of #40602 - oli-obk:fn_const, r=eddyb
Represent function pointers in mir-constants as a Value instead of Item

r? @eddyb
2017-03-24 18:13:10 -05:00
Corey Farwell
667e3166d8 Rollup merge of #40567 - clarcharr:rustdoc-sort, r=frewsxcv
Fix for #39596: sort Trait2 before Trait10.

This is a change discussed in #39596. Essentially, item names will be sorted as if they're (&str, u64) pairs instead of just `&str`, meaning that `"Apple" < "Banana"` and also `"Fruit10" > "Fruit2"`.

Sample sorting:

1. Apple
2. Banana
3. Fruit
4. Fruit0
5. Fruit00
6. Fruit1
7. Fruit01
8. Fruit2
9. Fruit02
10. Fruit20
11. Fruit100
12. Pear

Examples of generated documentation:
https://docs.charr.xyz/before-doc/test_sorting/
https://docs.charr.xyz/after-doc/test_sorting/

Screenshots of generated documentation:
Before: http://imgur.com/Ktb10ti
After: http://imgur.com/CZJjqIN
2017-03-24 18:13:09 -05:00
bors
3da40237e5 Auto merge of #40779 - arielb1:bad-arm, r=alexcrichton
update LLVM with fix for PR32379

Fixes #40593.

The "root" codegen bug fixed here is that, when generating ARM code, unpatched LLVM 3.9/3.9.1 miscompiles bit operations in rare circumstances - this can cause user code compiled via LLVM (through both `rustc` and `clang`) to subtly return incorrect results - for more details, see the test in this PR or in the LLVM rare report.

One effect of that LLVM bug is that `rustc` 1.17 (and possibly other versions) is miscompiled on ARM. The code generated by a miscompiled `rustc` lacks destructor calls in many circumstances.

Users who run an affected/miscompiled `rustc` - 1.17 or above - on an ARM build machine will be affected by the (fairly blatant) missing destructor bug, regardless of the target architecture (this includes the official `1.17.0-beta.1`, `1.17.0-beta.2`, and some official 1.17/1.18 nightlies).

Users who use an affected LLVM (that's any unpatched LLVM 3.9/3.9.1), whether through `rustc` (in any version that supports 3.9 - that's 1.12 or above) or through `clang`, who compile code to an ARM target architecture might be affected by the (fairly hard to hit) bit operation bug, regardless of the build machine.

Distributors and user who want to compile rustc using their own LLVM should apply the [patch](cdc303e5ed) to avoid miscompilations.

r? @alexcrichton
Beta-nominating because regression (rustc 1.16 is not blatantly miscompiled). This also picks a fix for the (MSVC-affecting) PR29151.
2017-03-24 21:09:34 +00:00
Jeffrey Seyfried
d64d3814c4 Rename builtin => global. 2017-03-24 21:06:01 +00:00
Jeffrey Seyfried
64e9af47f4 Allow declarative macros 2.0 and use macro imports to shadow builtin macros. 2017-03-24 21:05:52 +00:00
lukaramu
7643ccd29c Split paragraph in CONTRIBUTING.md 2017-03-24 21:28:59 +01:00
lukaramu
3b0add459c Update CONTRIBUTING.md
Changed link to documentation issues from A-docs to T-doc as this has just been migrated.
Added a link to the documentation style guidelines.
2017-03-24 21:16:00 +01:00
bors
8cf8fc9d89 Auto merge of #40777 - alexcrichton:update-mingw-compilers, r=aturon
appveyor: Upgrade MinGW toolchains we use

In debugging #40546 I was able to reproduce locally finally using
the literal toolchain that the bots were using. I reproduced the error maybe 4
in 10 builds. I also have the 6.3.0 toolchain installed through `pacman` which
has yet to have a failed build.

When attempting to reproduce the bug with the toolchain that this commit
switches to I was unable to reproduce anything after a few builds. I have no
idea what the original problem was, but I'm hoping that it was just some random
bug fixed somewhere along the way.

I don't currently know of a technical reason to stick to the 4.9.2 toolchains we
were previously using. Historcal 5.3.* toolchains would cause llvm to segfault
(maybe a miscompile?) but this seems to have been fixed recently. To me if it
passes CI then I think we're good.

Closes #40546
2017-03-24 18:40:57 +00:00
Alex Crichton
e6e8c91961 appveyor: Upgrade MinGW toolchains we use
In debugging #40546 I was able to reproduce locally finally using
the literal toolchain that the bots were using. I reproduced the error maybe 4
in 10 builds. I also have the 6.3.0 toolchain installed through `pacman` which
has yet to have a failed build.

When attempting to reproduce the bug with the toolchain that this commit
switches to I was unable to reproduce anything after a few builds. I have no
idea what the original problem was, but I'm hoping that it was just some random
bug fixed somewhere along the way.

I don't currently know of a technical reason to stick to the 4.9.2 toolchains we
were previously using. Historcal 5.3.* toolchains would cause llvm to segfault
(maybe a miscompile?) but this seems to have been fixed recently. To me if it
passes CI then I think we're good.

Closes #40546
2017-03-24 09:59:18 -07:00
bors
f2036c7be4 Auto merge of #40769 - alexcrichton:osx-crash-logs, r=nikomatsakis
travis: See if OSX generates crash dumps

I know for a fact we've had sccache segfault on various platforms and we've also
historically had a lot of problems with the linker on OSX. Let's just poke
around in the crash log directory to see if anything exists. If in the future we
see a build we think segfaulted *and* there's contents here then we can add some
bits that actually print out the logs.
2017-03-24 15:42:15 +00:00
Oliver Schneider
9c918464e1
Remove zst hacks 2017-03-24 16:19:32 +01:00
Oliver Schneider
b0d9afbc04
Represent function pointers in mir-constants as a Value instead of Item 2017-03-24 16:19:31 +01:00
Petr Zemek
432673a8dd Add a missing feature attribute to the example for std::process::Command::envs().
The person who originally wrote the example forgot to include this attribute.
This caused Travis CI to fail on commit 9b0a4a4e97 (#40794), which just fixed
formatting in the description of std::process::Command::envs().
2017-03-24 15:47:45 +01:00
bors
366386c46d Auto merge of #40676 - alexcrichton:update-sccache, r=brson
travis: Update sccache binary

Pick up mozilla/sccache#82
2017-03-24 10:11:05 +00:00
Petr Zemek
9b0a4a4e97 Fix formatting in the docs for std::process::Command::envs().
An empty line between the "Basic usage:" text and the example is required to
properly format the code. Without the empty line, the example is not formatted
as code.
2017-03-24 09:42:21 +01:00
Stepan Koltsov
f97b3f08cd Unnecessary iteration in BTreeMap::drop
`IntoIter::drop` already iterates.
2017-03-24 06:18:23 +03:00
Corey Farwell
8fba638b08 Rewrite io::BufRead doc examples to better demonstrate behaviors.
Prior to this commit, most of the `BufRead` examples used `StdinLock` to
demonstrate how certain `BufRead` methods worked. Using `StdinLock` is
not ideal since:

* Relying on run-time data means we can't show concrete examples of how
  these methods work up-front. The user is required to run them in order
  to see how they behave.
* If the user tries to run an example in the playpen, it won't work
  because the playpen doesn't support user input to stdin.
2017-03-23 23:04:36 -04:00
Niko Matsakis
a9f6babcda convert privacy access levels into a query 2017-03-23 19:10:45 -04:00
Niko Matsakis
69c9d9b3b8 ignore reads of tracked state when there is no current task
I realized that, even in the current system, such reads can't really do
any harm. Because they are not part of a task, they will occur no matter
what (only tasks can be skipped). If you leak the data you read into a
task, that is bad, but that is equally bad if you are in a task.

*Writes* to tracked state, on the other hand, should never occur except
from within a task (and the task then records what things you read to
compute it).

Once we complete the shift to on-demand, these properties will hold by
construction (because the on-demand struct enforces stateless tasks
where leaks are impossible -- except by having shared mutable state in
the tcx).
2017-03-23 19:10:45 -04:00
Ariel Ben-Yehuda
bd52ff1cc3 update LLVM with fix for PR32379
Fixes #40593.
2017-03-24 00:54:23 +02:00
Clar Charr
c09083c3d1 Fix for #39596: sort Trait1 before Trait2. 2017-03-23 18:21:34 -04:00
Alex Crichton
37fd1320bd travis: Attempt to see if oom kills anything
There's a suspicion that the OOM killer is killing sccache (maybe) so this adds
some logging to test out that assumption to see if anything dies and is logged
by `dmesg`
2017-03-23 12:33:24 -07:00
Alex Crichton
7bed84f17e travis: See if OSX generates crash dumps
I know for a fact we've had sccache segfault on various platforms and we've also
historically had a lot of problems with the linker on OSX. Let's just poke
around in the crash log directory to see if anything exists. If in the future we
see a build we think segfaulted *and* there's contents here then we can add some
bits that actually print out the logs.
2017-03-23 12:00:50 -07:00
bors
e703b33e3e Auto merge of #40759 - alexcrichton:appveyor-retry, r=brson
appveyor: Leverage auto-retry to upload to S3

This was recently implemented (appveyor/ci#1387) in response to one of our
feature requests, so let's take advantage of it! I'm going to optimistically
say...

Closes #39074
2017-03-23 18:43:40 +00:00