Commit graph

14854 commits

Author SHA1 Message Date
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
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
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
Manish Goregaokar
0a1c9ae022 Improved rustdoc rendering for unstable features 2017-01-09 21:50:00 -08: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
Manish Goregaokar
b9b0732d2a Make unions never have needs_drop 2017-01-09 10:44:41 -08: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
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
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
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
008e2393bd Auto merge of #38859 - jonathandturner:E0088_fix, r=eddyb
E0088/E0090 fix

This fixes an issue reported by @eddyb (https://github.com/rust-lang/rust/pull/36208#issuecomment-2707092230) where the check for "too few lifetime parameters" was removed in one of the error message PRs.

I also removed the span shrinking from E0088, as early bound lifetimes give you a confusing underline in some cases.

r=eddyb
2017-01-07 05:59:38 +00:00
Alex Crichton
abb9189083 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-06 21:20:39 -08:00
Esteban Küber
e72b203566 Test for appropriate span on second custom derive 2017-01-06 18:17:34 -08:00
bors
25bfc8aedc Auto merge of #38855 - Mark-Simulacrum:immediate-fix, r=eddyb
Fix ICE on i686 when calling immediate() on OperandValue::Ref in return

Fixes #38727, and adds a test case.

r? @eddyb
2017-01-07 02:01:51 +00:00
bors
7e38a89a7b Auto merge of #38835 - alexcrichton:less-overlapped, r=brson
std: Don't pass overlapped handles to processes

This commit fixes a mistake introduced in #31618 where overlapped handles were
leaked to child processes on Windows. On Windows once a handle is in overlapped
mode it should always have I/O executed with an instance of `OVERLAPPED`. Most
child processes, however, are not prepared to have their stdio handles in
overlapped mode as they don't use `OVERLAPPED` on reads/writes to the handle.

Now we haven't had any odd behavior in Rust up to this point, and the original
bug was introduced almost a year ago. I believe this is because it turns out
that if you *don't* pass an `OVERLAPPED` then the system will [supply one for
you][link]. In this case everything will go awry if you concurrently operate on
the handle. In Rust, however, the stdio handles are always locked, and there's
no way to not use them unlocked in libstd. Due to that change we've always had
synchronized access to these handles, which means that Rust programs typically
"just work".

Conversely, though, this commit fixes the test case included, which exhibits
behavior that other programs Rust spawns may attempt to execute. Namely, the
stdio handles may be concurrently used and having them in overlapped mode wreaks
havoc.

[link]: https://blogs.msdn.microsoft.com/oldnewthing/20121012-00/?p=6343

Closes #38811
2017-01-06 23:49:57 +00:00
Eduard-Mihai Burtescu
85a4a192c7 rustc: keep track of tables everywhere as if they were per-body. 2017-01-06 22:23:29 +02:00
bors
e447b73f39 Auto merge of #38792 - jseyfried:improve_macros_11_diagnostics, r=nikomatsakis
proc macros 1.1: improve diagnostics

Fixes #38586.
r? @nrc
2017-01-06 19:23:06 +00:00
bors
0728b71034 Auto merge of #38833 - arielb1:constant-mir-overflow, r=eddyb
fix promotion of MIR terminators

promotion of MIR terminators used to try to promote the destination it
is trying to promote, leading to stack overflow.

Also clean up the code in `promote_temp` a bit to make it more understandable.

Fixes #37991.

cc @nikomatsakis
r? @eddyb
2017-01-06 09:43:37 +00:00
bors
e7907a9910 Auto merge of #38793 - jseyfried:fix_macro_export_duplicates, r=nrc
Fix regression with duplicate `#[macro_export] macro_rules!`

Fixes #38715.
r? @nrc
2017-01-06 06:41:31 +00:00
est31
1779ffa98f Make members of {std,core}::{i128,u128} unstable
Adding it in a stable form was an accident.
It thankfully only leaked to nightly.

Fixes #38860
2017-01-06 03:53:55 +01:00
bors
6f1ae663ef Auto merge of #38069 - canndrew:empty-sub-patterns-again, r=nikomatsakis
Fix handling of empty types in patterns.

Fix for #12609.
2017-01-06 00:17:41 +00:00
Jonathan Turner
33bb4715e7 Fix tidy warning 2017-01-06 10:18:11 +11:00
Jonathan Turner
069aa30445 Add in test for E0090 2017-01-06 10:05:55 +11:00
bors
42bed72385 Auto merge of #38689 - pnkfelix:dont-check-stability-on-private-items, r=nikomatsakis
Dont check stability for items that are not pub to universe.

Dont check stability for items that are not pub to universe.

In other words, skip it for private and even `pub(restricted)` items, because stability checks are only relevant to things visible in other crates.

Fix #38412.
2017-01-05 21:58:45 +00:00
Mark Simulacrum
97c008c398 Fix ICE on i686 when calling immediate() on OperandValue::Ref in return 2017-01-05 12:59:50 -07:00
bors
ea2d41e31f Auto merge of #38817 - jseyfried:improve_unused_qualification_lint, r=petrochenkov
resolve: don't `unused_qualifications`-check global paths

We started `unused_qualifications`-checking global paths in #38014, causing #38682.
Fixes #38682.
r? @nrc
2017-01-05 19:56:31 +00:00
Michael Woerister
56e5867698 ICH: Add some more test cases for trait impls. 2017-01-05 10:53:29 -05:00
Andrew Cann
291c84aad4 Un-remove E0001, put a notice on it instead 2017-01-05 23:48:02 +08:00
bors
74e5b7d96a Auto merge of #38152 - arielb1:special-copy, r=nikomatsakis
Fix associated types in copy implementations

Fixes an ICE and an error in checking copy implementations.

r? @nikomatsakis
2017-01-05 13:05:30 +00:00
bors
2f56207b12 Auto merge of #38776 - eddyb:unsigned-means-unsigned, r=pnkfelix
Properly ban the negation of unsigned integers in type-checking.

Lint-time banning of unsigned negation appears to be vestigial from a time it was feature-gated.
But now it always errors and we do have the ability to deref the checking of e.g. `-0`, through the trait obligation fulfillment context, which will only succeed/error when the `0` gets inferred to a specific type.

The two removed tests are the main reason for finally cleaning this up, they need changing all the time when refactoring the HIR-based `rustc_const_eval` and/or `rustc_passes::consts`, as warnings pile up.
2017-01-05 11:06:10 +00:00
bors
26e2ee00f9 Auto merge of #38767 - est31:master, r=eddyb
Some i128 tests

* Add some FFI tests for i128 on architectures where we have sort of working "C" FFI support. On all other architectures we ignore the test.
* enhance the u128 overflow tests
2017-01-05 09:02:40 +00:00
bors
5dd07b66ff Auto merge of #38756 - Mark-Simulacrum:2nd-trans-cleanup, r=eddyb
Additional cleanup to rustc_trans

Removes `BlockAndBuilder`, `FunctionContext`, and `MaybeSizedValue`.

`LvalueRef` is used instead of `MaybeSizedValue`, which has the added benefit of making functions operating on `Lvalue`s be able to take just that (since it encodes the type with an `LvalueTy`, which can carry discriminant information) instead of a `MaybeSizedValue` and a discriminant.

r? @eddyb
2017-01-05 06:01:24 +00:00
Eduard-Mihai Burtescu
8f84e955e0 Allow projections to be promoted to constants in MIR. 2017-01-05 02:33:09 +02:00
Alex Crichton
5148918db6 std: Don't pass overlapped handles to processes
This commit fixes a mistake introduced in #31618 where overlapped handles were
leaked to child processes on Windows. On Windows once a handle is in overlapped
mode it should always have I/O executed with an instance of `OVERLAPPED`. Most
child processes, however, are not prepared to have their stdio handles in
overlapped mode as they don't use `OVERLAPPED` on reads/writes to the handle.

Now we haven't had any odd behavior in Rust up to this point, and the original
bug was introduced almost a year ago. I believe this is because it turns out
that if you *don't* pass an `OVERLAPPED` then the system will [supply one for
you][link]. In this case everything will go awry if you concurrently operate on
the handle. In Rust, however, the stdio handles are always locked, and there's
no way to not use them unlocked in libstd. Due to that change we've always had
synchronized access to these handles, which means that Rust programs typically
"just work".

Conversely, though, this commit fixes the test case included, which exhibits
behavior that other programs Rust spawns may attempt to execute. Namely, the
stdio handles may be concurrently used and having them in overlapped mode wreaks
havoc.

[link]: https://blogs.msdn.microsoft.com/oldnewthing/20121012-00/?p=6343

Closes #38811
2017-01-04 15:37:12 -08:00
Ariel Ben-Yehuda
99aa48de29 fix promotion of MIR terminators
promotion of MIR terminators used to try to promote the destination it
is trying to promote, leading to stack overflow.

Fixes #37991.
2017-01-05 01:19:54 +02:00
bors
95b14a3b50 Auto merge of #38783 - alexcrichton:stabilize-proc-macro, r=nikomatsakis
rustc: Stabilize the `proc_macro` feature

This commit stabilizes the `proc_macro` and `proc_macro_lib` features in the
compiler to stabilize the "Macros 1.1" feature of the language. Many more
details can be found on the tracking issue, #35900.

Closes #35900
2017-01-04 20:06:21 +00:00
Mark Simulacrum
1be170b01a Replace BlockAndBuilder with Builder. 2017-01-04 11:33:31 -07:00
est31
28f6d4a637 Add test for i128 ffi usage 2017-01-04 19:05:27 +01:00
est31
1fefa3cc91 enhance u128 overflow tests 2017-01-04 19:00:38 +01:00
Esteban Küber
1a4a6b9dfe Add test for correct span for type
Test for #27522.
2017-01-04 09:56:22 -08:00
bors
d40d01bd0e Auto merge of #38670 - dotdash:transmute_align, r=eddyb
Fix transmute::<T, U> where T requires a bigger alignment than U

For transmute::<T, U> we simply pointercast the destination from a U
pointer to a T pointer, without providing any alignment information,
thus LLVM assumes that the destination is aligned to hold a value of
type T, which is not necessarily true. This can lead to LLVM emitting
machine instructions that assume said alignment, and thus cause aborts.

To fix this, we need to provide the actual alignment to store_operand()
and in turn to store() so they can set the proper alignment information
on the stores and LLVM can emit the proper machine instructions.

Fixes #32947
2017-01-04 14:26:17 +00:00
Ariel Ben-Yehuda
5fad51e7f4 typeck::coherence::builtin - sort impls in the DefId order
this makes error messages consistent across architectures
2017-01-04 11:54:57 +02:00
Jeffrey Seyfried
927408d9c5 Fix regression with duplicate #[macro_export] macro_rules!. 2017-01-04 08:03:23 +00:00
Jeffrey Seyfried
7dcacf15b9 Don't unused_qualifications-check global paths. 2017-01-04 06:19:58 +00:00
Eduard-Mihai Burtescu
bb04da4822 Don't leak the compiler's internal representation of scopes in error messages. 2017-01-04 05:48:18 +02:00
Ariel Ben-Yehuda
4cab2931c8 simplify Copy implementation error reporting
Span the affected fields instead of reporting the field/variant name.
2017-01-04 00:03:34 +02:00
Ariel Ben-Yehuda
243e45aac3 normalize field types in copy implementations
Fixes #34377.
2017-01-03 21:50:18 +02:00
Eduard-Mihai Burtescu
fbdadcbed4 Properly ban the negation of unsigned integers in type-checking. 2017-01-03 21:48:17 +02:00
Felix S. Klock II
ab8e92514c Regression test and exploratory unit test. 2017-01-03 09:58:05 -05:00