Commit Graph

55425 Commits

Author SHA1 Message Date
Simonas Kazlauskas e97f104da6 Fix two const-eval issues related to i128 negation
First issue here was the fact that we’d only allow negating integers in i64 range in case the
integer was not infered yes. While this is not the direct cause of the issue, its still good to fix
it.

The real issue here is the code handling specifically the `min_value` literals. While I128_OVERFLOW
has the expected value (0x8000_..._0000), match using this value as a pattern is handled
incorrectly by the stage1 compiler (it seems to be handled correctly, by the stage2 compiler). So
what we do here is extract this pattern into an explicit `==` until the next snapshot.

Fixes #38987
2017-01-11 19:38:44 +02:00
bors e57f061be2 Auto merge of #38916 - estebank:pad-suggestion-list, r=nikomatsakis
Teach diagnostics to correct margin of multiline messages

Make the suggestion list have a correct padding:

```
error[E0308]: mismatched types
 --> file.rs:3:20
  |
3 |     let x: usize = "";
  |                    ^^ expected usize, found reference
  |
  = note: expected type `usize`
  = note:    found type `&'static str`
  = help: here are some functions which might fulfill your needs:
          - .len()
          - .foo()
          - .bar()
```
2017-01-11 05:27:11 +00:00
bors e4fee525e0 Auto merge of #38960 - arielb1:blake-endian, r=michaelwoerister
Use little-endian encoding for Blake2 hashing on all architectures

Like many hash functions, the blake2 hash is mathematically defined on
a sequence of 64-bit words. As Rust's hash interface operates on
sequences of octets, some encoding must be used to bridge that
difference.

The Blake2 RFC (RFC 7693) specifies that:
```
   Byte (octet) streams are interpreted as words in little-endian order,
   with the least-significant byte first.
```

So use that encoding consistently.

Fixes #38891.

Beta-nominating since this is a regression since 1.15.

r? @michaelwoerister
2017-01-11 01:33:03 +00:00
bors 0500fbf6ba Auto merge of #38580 - shepmaster:result-sum, r=alexcrichton
Implement `iter::Sum` and `iter::Product` for `Result`

This introduces a private iterator adapter `ResultShunt`, which allows
treating an iterator of `Result<T, E>` as an iterator of `T`.
2017-01-10 23:25:31 +00:00
bors d6b927dd91 Auto merge of #38843 - Manishearth:proposed, r=GuillaumeGomez
Improved rustdoc rendering for unstable features

This replaces "unstable" with "this is an experimental API", and uses a `<details>` tag to expand to the reason.

The `<details>` tag renders as a regular div (with the details show) on browsers which don't support it, On browsers which do support it, it shows only the summary line with an expandy-arrow next to it, and on clicking it the details will turn up below it.

This is somewhat a strawman proposal. The main issue is that we need to improve our messaging around unstable APIs. Since they turn up in the docs, we should be clearer that they are experimental (and perhaps add something about nightly-only). I'm making this PR to kickstart discussion on this.

Example rendering: http://manishearth.github.io/rust-internals-docs/std/io/trait.Read.html#method.chars

<img width="375" alt="screen shot 2017-01-04 at 10 15 37 pm" src="https://cloud.githubusercontent.com/assets/1617736/21670712/5a96c7de-d2cb-11e6-86a6-87f70818d634.png">

expands to

<img width="799" alt="screen shot 2017-01-04 at 10 15 43 pm" src="https://cloud.githubusercontent.com/assets/1617736/21670714/5db88bb4-d2cb-11e6-8fcc-5cf11d198b75.png">

cc @steveklabnik @jdub
2017-01-10 21:16:06 +00:00
Jake Goulding 23715d344d Implement iter::Sum and iter::Product for Result
This introduces a private iterator adapter `ResultShunt`, which allows
treating an iterator of `Result<T, E>` as an iterator of `T`.
2017-01-10 14:24:06 -05:00
Ariel Ben-Yehuda a89475d7ec Use little-endian encoding for Blake2 hashing on all architectures
Like many hash functions, the blake2 hash is mathematically defined on
a sequence of 64-bit words. As Rust's hash interface operates on
sequences of octets, some encoding must be used to bridge that
difference.

The Blake2 RFC (RFC 7693) specifies that:
   Byte (octet) streams are interpreted as words in little-endian order,
   with the least-significant byte first.

So use that encoding consistently.

Fixes #38891.
2017-01-10 20:43:32 +02:00
Seo Sanghyeon db74f11f78 Rollup merge of #38874 - derekdreery:patch-1, r=steveklabnik
Update vec.rs

Add a warning not to convert  char* from c to Vec<u8> (I thought you could until I asked on irc).

Reasoning is that it will help people avoid an error that could cause crashes and undefined behaviour. Only drawback is that it could confuse someone not familiar with C, but beginners are unlikely to be using this function anyway.
2017-01-10 20:27:48 +09:00
Seo Sanghyeon 8ccb3ef5ee Rollup merge of #38849 - michaelwoerister:ich-trait-impl-test, r=nikomatsakis
ICH: Add some more test cases for trait impls.

r? @nikomatsakis
2017-01-10 20:27:47 +09:00
Seo Sanghyeon 833d6938e9 Rollup merge of #38841 - F001:Fix, r=steveklabnik
Update usage of rustc

Add proc_macro crate type
2017-01-10 20:27:46 +09:00
Seo Sanghyeon 20c7dbc9b4 Rollup merge of #38839 - frewsxcv:osstr-to-str, r=GuillaumeGomez
Expand {Path,OsStr}::{to_str,to_string_lossy} doc examples.

None
2017-01-10 20:27:45 +09:00
Seo Sanghyeon a62f1b536e Rollup merge of #38836 - ollie27:patch-1, r=steveklabnik
Fix typo in tuple docs

r? @steveklabnik
2017-01-10 20:27:44 +09:00
Seo Sanghyeon ac2723886f Rollup merge of #38816 - Manishearth:coercion-doc, r=GuillaumeGomez
Add more docs for CoerceUnsized and Unsize

here be dragons

r? @ubsan @steveklabnik
2017-01-10 20:27:43 +09:00
Seo Sanghyeon 25a9d91929 Rollup merge of #38799 - minaguib:patch-1, r=steveklabnik
Doc fix
2017-01-10 20:27:42 +09:00
Seo Sanghyeon d350c9b15f Rollup merge of #38664 - apasel422:may-dangle, r=pnkfelix
Replace uses of `#[unsafe_destructor_blind_to_params]` with `#[may_dangle]`

CC #34761

r? @pnkfelix
2017-01-10 20:27:41 +09:00
Seo Sanghyeon 4d3d2c7397 Rollup merge of #38623 - alexcrichton:less-osx-warnings, r=aturon
std: Remove unused objects from compiler-builtins

We don't actually use trampoline_setup.c and all the `*tf3` business
seems related to f80/f128 business. Specifically this'll fix some
warnings showing up during builds on OSX.
2017-01-10 20:27:40 +09:00
Seo Sanghyeon 3149261273 Rollup merge of #38607 - estebank:test-for-36935, r=alexcrichton
Test for appropriate span on second custom derive

Adds test for and closes #36935.
2017-01-10 20:27:39 +09:00
Seo Sanghyeon a81cd326c3 Rollup merge of #38606 - estebank:test-for-27522, r=petrochenkov
Add test for correct span for type

Adds test for and closes #27522.
2017-01-10 20:27:38 +09:00
bors 78c892d865 Auto merge of #38138 - rkruppe:no_std-no_loop, r=steveklabnik
book: use abort() over loop {} for panic

Due to #28728 `loop {}` is very risky and can lead to fun debugging experiences such as #38136. Besides, aborting is probably better behavior than an infinite loop.

r? @steveklabnik
2017-01-10 06:50:59 +00:00
Manish Goregaokar 0a1c9ae022 Improved rustdoc rendering for unstable features 2017-01-09 21:50:00 -08:00
bors 2fa9feb37a Auto merge of #38947 - nrc:custom-derive-span, r=jseyfried
Give custom derive spans an expansion ID

r? @jseyfried
2017-01-10 04:44:04 +00:00
bors 26dc969b3d Auto merge of #38934 - Manishearth:nodrop, r=eddyb
Remove destructor-related restrictions from unions

They don't have drop glue.

This doesn't fix the rvalue promotion issues when trying to do things like `static FOO: NoDrop<Bar> = NoDrop {inner: Bar}`. I'm not sure if we should fix that.
2017-01-10 02:45:37 +00:00
Nick Cameron 3be6991099 Give custom derive spans an expansion ID 2017-01-10 14:06:30 +13:00
bors 76bc5e1c80 Auto merge of #38937 - nrc:save-ty-fix, r=nikomatsakis
save-analysis: fix over-zealous filter on generated code
2017-01-09 23:46:00 +00:00
bors 9749df52b7 Auto merge of #38244 - estebank:escape-reason-docs, r=ollie27
rustdoc: escape the deprecated and unstable reason text

Fix #38220.
Instead of the [current output](https://doc.rust-lang.org/std/boxed/trait.FnBox.html):

<img width="967" alt="incorrect unescaped unstable reason in docs" src="https://cloud.githubusercontent.com/assets/1606434/21021898/73121d42-bd2f-11e6-8076-8a5127dbc010.png">

display:

<img width="979" alt="escaped unstable reason in docs" src="https://cloud.githubusercontent.com/assets/1606434/21021876/52eb0f88-bd2f-11e6-9088-58bdc7d92328.png">
2017-01-09 19:38:50 +00:00
Manish Goregaokar b9b0732d2a Make unions never have needs_drop 2017-01-09 10:44:41 -08:00
bors 5c1472a720 Auto merge of #38581 - frewsxcv:vecdequeue-insert, r=GuillaumeGomez
Clarify behavior of `VecDeque::insert`.

Fixes https://github.com/rust-lang/rust/issues/37046.
2017-01-09 17:31:41 +00:00
Esteban Küber 04e4a60b45 Deduplicate and document logic 2017-01-09 09:11:26 -08:00
bors bd16aa08cd Auto merge of #38310 - frewsxcv:ctlz-cttz, r=pnkfelix
Clarify zero-value behavior of `ctlz`/`cttz` intrinsics.

Fixes https://github.com/rust-lang/rust/issues/34381.
2017-01-09 13:56:10 +00:00
bors 7ef1a69d2e Auto merge of #38929 - Manishearth:compiler-docs, r=alexcrichton
Don't restrict docs in compiler-docs mode

Search is broken without this. We want all crates to be included in compiler-docs mode. This was changed in https://github.com/rust-lang/rust/pull/38858, this PR brings that functionality back in compiler-docs mode.
2017-01-09 10:58:08 +00:00
bors 7aab3d38a0 Auto merge of #38866 - alexcrichton:try-wait, r=aturon
std: Add a nonblocking `Child::try_wait` method

This commit adds a new method to the `Child` type in the `std::process` module
called `try_wait`. This method is the same as `wait` except that it will not
block the calling thread and instead only attempt to collect the exit status. On
Unix this means that we call `waitpid` with the `WNOHANG` flag and on Windows it
just means that we pass a 0 timeout to `WaitForSingleObject`.

Currently it's possible to build this method out of tree, but it's unfortunately
tricky to do so. Specifically on Unix you essentially lose ownership of the pid
for the process once a call to `waitpid` has succeeded. Although `Child` tracks
this state internally to be resilient to multiple calls to `wait` or a `kill`
after a successful wait, if the child is waited on externally then the state
inside of `Child` is not updated. This means that external implementations of
this method must be extra careful to essentially not use a `Child`'s methods
after a call to `waitpid` has succeeded (even in a nonblocking fashion).

By adding this functionality to the standard library it should help canonicalize
these external implementations and ensure they can continue to robustly reuse
the `Child` type from the standard library without worrying about pid ownership.
2017-01-09 07:01:10 +00:00
Esteban Küber 690476191d Remove magic number 2017-01-08 21:18:24 -08:00
Esteban Küber d8b3a64b75 review comment 2017-01-08 21:10:08 -08:00
bors f5cfe83da9 Auto merge of #38840 - kjaleshire:multiple-targets-error-fix, r=nrc
Warn that the link target ignores the given name

Hi, new contributor here. This is my stab at #20130, any feedback welcome!
2017-01-09 04:57:36 +00:00
Manish Goregaokar af00927a8b Don't restrict docs in compiler-docs mode 2017-01-08 20:31:10 -08:00
bors aee21e2594 Auto merge of #38910 - steveklabnik:update_docs, r=eddyb
Improve safety warning on ptr::swap

r? @eddyb @bluss , who I asked about this on IRC
2017-01-09 02:59:33 +00:00
Nick Cameron 1cfe3b1c8c save-analysis: fix over-zealous filter on generated code 2017-01-09 15:07:07 +13:00
bors 7265b93842 Auto merge of #38907 - alexcrichton:curl-retry, r=japaric
rustbuild: Pass --retry 3 to curl

Try to handle spurious network failures on Travis by automatically
retrying failed downloads on Travis.
2017-01-09 01:00:30 +00:00
Esteban Küber b206064fc8 Teach diagnostics to correct margin on multiline messages
Make any diagnostic line to have the correct margin to align with the
first line:

```
error: message
 --> file.rs:3:20
  |
3 |     <CODE>
  |      ^^^^
  |
  = note: this is a multiline
          note with a correct
          margin
  = note: this is a single line note
  = help: here are some functions which might fulfill your needs:
          - .len()
          - .foo()
          - .bar()
  = suggestion: this is a multiline
                suggestion with a
                correct margin
```
2017-01-08 16:07:14 -08:00
Esteban Küber f65a907ef9 Use fold instead of collect/join and add comments 2017-01-08 13:12:13 -08:00
bors bb7e7ef70e Auto merge of #38861 - est31:master, r=alexcrichton
Make members of {std,core}::{i128,u128} unstable

Fixes #38860
2017-01-08 19:50:57 +00:00
bors 302602bcb3 Auto merge of #38853 - alexcrichton:better-dist, r=brson
rustbuild: Don't build target compilers in stage0

The `doc-book` and `doc-nomicon` steps accidentally depended on a rustbook
compiled by a cross-compiled compiler, which isn't necessary. Be sure to set the
`host` on these dependency edges to the build compiler to ensure that we're
always using a tool compiled for the host platform.

This was discovered trawling the build logs for the new dist bots and
discovering that they're building one too many compilers in stage0.
2017-01-08 17:48:14 +00:00
bors d2c795932b Auto merge of #38837 - eddyb:issue-38074, r=nikomatsakis
Allow projections to be promoted to constants in MIR.

This employs the `LvalueContext` additions by @pcwalton to properly extend the MIR promotion of temporaries to allow projections (field accesses, indexing and dereferences) on said temporaries.

It's needed both parity with the old constant qualification logic (for current borrowck) and it fixes #38074.
The former is *required for soundness* if we accept the RFC for promoting rvalues to `'static` constants.
That is, until we get MIR borrowck and the same source of truth will be used for both checks and codegen.
2017-01-08 15:51:49 +00:00
bors e350c44e0c Auto merge of #38797 - abhijeetbhagat:master, r=petrochenkov
Fix process module tests to run on Windows

Fixes #38565
r? @retep998
2017-01-08 13:40:46 +00:00
bors cbf88730e7 Auto merge of #38813 - eddyb:lazy-11, r=nikomatsakis
[11/n] Separate ty::Tables into one per each body.

_This is part of a series ([prev](https://github.com/rust-lang/rust/pull/38449) | [next]()) of patches designed to rework rustc into an out-of-order on-demand pipeline model for both better feature support (e.g. [MIR-based](https://github.com/solson/miri) early constant evaluation) and incremental execution of compiler passes (e.g. type-checking), with beneficial consequences to IDE support as well.
If any motivation is unclear, please ask for additional PR description clarifications or code comments._

<hr>

In order to track the results of type-checking and inference for incremental recompilation, they must be stored separately for each function or constant value, instead of lumped together.

These side-`Tables` also have to be tracked by various passes, as they visit through bodies (all of which have `Tables`, even if closures share the ones from their parent functions). This is usually done by switching a `tables` field in an override of `visit_nested_body` before recursing through `visit_body`, to the relevant one and then restoring it - however, in many cases the nesting is unnecessary and creating the visitor for each body in the crate and then visiting that body, would be a much cleaner solution.

To simplify handling of inlined HIR & its side-tables, their `NodeId` remapping and entries HIR map were fully stripped out, which means that `NodeId`s from inlined HIR must not be used where a local `NodeId` is expected. It might be possible to make the nodes (`Expr`, `Block`, `Pat`, etc.) that only show up within a `Body` have IDs that are scoped to that `Body`, which would also allow `Tables` to use `Vec`s.

That last part also fixes #38790 which was accidentally introduced in a previous refactor.
2017-01-08 11:36:52 +00:00
bors 7ac9d337dc Auto merge of #38679 - alexcrichton:always-deny-warnings, r=nrc
Remove not(stage0) from deny(warnings)

Historically this was done to accommodate bugs in lints, but there hasn't been a
bug in a lint since this feature was added which the warnings affected. Let's
completely purge warnings from all our stages by denying warnings in all stages.
This will also assist in tracking down `stage0` code to be removed whenever
we're updating the bootstrap compiler.
2017-01-08 08:22:06 +00:00
Esteban Küber 43b10fa8ed Teach diagnostics to have correctly padded lists
Make the suggestion list have a correct padding:

```
error[E0308]: mismatched types
 --> file.rs:3:20
  |
3 |     let x: usize = "";
  |                    ^^ expected usize, found reference
  |
  = note: expected type `usize`
  = note:    found type `&'static str`
  = help: here are some functions which might fulfill your needs:
          - .len()
          - .foo()
          - .bar()
```
2017-01-07 23:34:37 -08:00
Esteban Küber 78e9093abb trying to figure out why this test failes, might need help 2017-01-07 23:31:23 -08:00
bors 5219dad855 Auto merge of #38883 - alexcrichton:android-flaky, r=brson
compiletest: Fix flaky Android gdb test runs

Local testing showed that I was able to reproduce an error where debuginfo tests
on Android would fail with "connection reset by peer". Further investigation
turned out that the gdb tests are android with bit of process management:

* First an `adb forward` command is run to ensure that the host's port 5039 is
  the same as the emulator's.
* Next an `adb shell` command is run to execute the `gdbserver` executable
  inside the emulator. This gdb server will attach to port 5039 and listen for
  remote gdb debugging sessions.
* Finally, we run `gdb` on the host (not in the emulator) and then connect to
  this gdb server to send it commands.

The problem was happening when the host's gdb was failing to connect to the
remote gdbserver running inside the emulator. The previous test for this was
that after `adb shell` executed we'd sleep for a second and then attempt to make
a TCP connection to port 5039. If successful we'd run gdb and on failure we'd
sleep again.

It turns out, however, that as soon as we've executed `adb forward` all TCP
connections to 5039 will succeed. This means that we would only ever sleep for
at most one second, and if this wasn't enough time we'd just fail later because
we would assume that gdbserver had started but it may not have done so yet.

This commit fixes these issues by removing the TCP connection to test if
gdbserver is ready to go. Instead we read the stdout of the process and wait for
it to print that it's listening at which point we start running gdb. I've found
that locally at least I was unable to reproduce the failure after these changes.

Closes #38710
2017-01-08 06:19:14 +00:00
bors 0576869085 Auto merge of #38822 - michaelwoerister:collect-fn-once-adapter, r=eddyb
trans: Fix missing closure env drop-glue in trans-item collector.

FnOnce adapters automatically generated by the compiler introduce a call to drop the closure environment. The collector didn't pick up on that because this drop call does not show up in MIR. That could lead to an assertion being triggered if the drop-glue for the environment wasn't instantiated via something else.

Fixes #38810

cc @arielb1

r? @eddyb or @nikomatsakis
2017-01-08 04:18:32 +00:00