Commit graph

23661 commits

Author SHA1 Message Date
Dan Robertson
210c6071b0
Add c_variadic language feature item 2019-02-27 10:21:40 -05:00
Dan Robertson
58147d486b
Support defining C compatible variadic functions
Add support for defining C compatible variadic functions in unsafe rust
with extern "C".
2019-02-27 10:21:35 -05:00
bors
55c173c8ae Auto merge of #57367 - petrochenkov:unrestab, r=Centril
Stabilize `unrestricted_attribute_tokens`

In accordance with a plan described in https://internals.rust-lang.org/t/unrestricted-attribute-tokens-feature-status/8561/3.

Delimited non-macro non-builtin attributes now support the same syntax as macro attributes:
```
PATH
PATH `(` TOKEN_STREAM `)`
PATH `[` TOKEN_STREAM `]`
PATH `{` TOKEN_STREAM `}`
```
Such attributes mostly serve as inert proc macro helpers or tool attributes.
To some extent these attributes are de-facto stable due to a hole in feature gate checking (feature gating is done too late - after macro expansion.)
So if macro *removes* such helper attributes during expansion (and it must remove them, unless it's a derive macro), then the code will work on stable.

Key-value non-macro non-builtin attributes are now restricted to bare minimum required to support what we support on stable - unsuffixed literals (https://github.com/rust-lang/rust/issues/34981).
```
PATH `=` LITERAL
```
(Key-value macro attributes are not supported at all right now.)
Crater run in https://github.com/rust-lang/rust/pull/57321 found no regressions for this change.
There are multiple possible ways to extend key-value attributes (https://github.com/rust-lang/rust/pull/57321#issuecomment-451574065), but I'd expect an RFC for that and it's not a pressing enough issue to block stabilization of delimited attributes.

Built-in attributes are still restricted to the "classic" meta-item syntax, nothing changes here.
https://github.com/rust-lang/rust/pull/57321 goes further and adds some additional restrictions (more consistent input checking) to built-in attributes.

Closes https://github.com/rust-lang/rust/issues/55208
2019-02-25 23:23:09 +00:00
bors
00aae71f50 Auto merge of #58302 - SimonSapin:tryfrom, r=alexcrichton
Stabilize TryFrom and TryInto with a convert::Infallible empty enum

This is the plan proposed in https://github.com/rust-lang/rust/issues/33417#issuecomment-423073898
2019-02-25 20:24:10 +00:00
Vadim Petrochenkov
eccc19996b Stabilize unrestricted_attribute_tokens 2019-02-25 23:21:54 +03:00
Vadim Petrochenkov
8e1b5d897a Restrict value in key-value attributes to literals 2019-02-25 22:40:38 +03:00
Mazdak Farrokhzad
e53fbf8bf2
Rollup merge of #58725 - jamwt:fix-27949, r=Centril
Test that binop subtyping in rustc_typeck fixes #27949
2019-02-25 11:42:30 +01:00
Mazdak Farrokhzad
554aed6c7d
Rollup merge of #55632 - ollie27:deny_overflowing_literals, r=Centril
Deny the `overflowing_literals` lint for all editions

The `overflowing_literals` was made deny by default for the 2018 edition by #54507, however I'm not aware of any reason it can't be made deny by default for the 2015 edition as well.
2019-02-25 11:42:18 +01:00
Jamie Turner
7029094735 Test that binop subtyping in rustc_typeck fixes #27949 2019-02-25 00:41:58 -08:00
bors
31eb0e2d3c Auto merge of #57609 - matthewjasper:more-restrictive-match, r=pnkfelix
Use normal mutable borrows in matches

`ref mut` borrows are currently two-phase with NLL enabled. This changes them to be proper mutable borrows. To accommodate this, first the position of fake borrows is changed:

```text
[ 1. Pre-match ]
       |
[ (old create fake borrows) ]
[ 2. Discriminant testing -- check discriminants ] <-+
       |                                             |
       | (once a specific arm is chosen)             |
       |                                             |
[ (old read fake borrows) ]                          |
[ 3. Create "guard bindings" for arm ]               |
[ (create fake borrows) ]                            |
       |                                             |
[ 4. Execute guard code ]                            |
[ (read fake borrows) ] --(guard is false)-----------+
       |
       | (guard results in true)
       |
[ 5. Create real bindings and execute arm ]
       |
[ Exit match ]
```

The following additional changes are made to accommodate `ref mut` bindings:

* We no longer create fake `Shared` borrows. These borrows are no longer needed for soundness, just to avoid some arguably strange cases.
* `Shallow` borrows no longer conflict with existing borrows, avoiding conflicting access between the guard borrow access and the `ref mut` borrow.

There is some further clean up done in this PR:

* Avoid the "later used here" note for Shallow borrows (since it's not relevant with the message provided)
* Make any use of a two-phase borrow activate it.
* Simplify the cleanup_post_borrowck passes into a single pass.

cc #56254

r? @nikomatsakis
2019-02-25 06:27:35 +00:00
Mazdak Farrokhzad
03acebe2ca
Rollup merge of #58370 - nox:relax-bounds, r=dtolnay
Relax some Hash bounds on HashMap<K, V, S> and HashSet<T, S>

Notably, hash iterators don't require any trait bounds to be iterated.
2019-02-25 03:17:58 +01:00
bors
097c04cf43 Auto merge of #58315 - gnzlbg:returns_twice, r=alexcrichton
Implement unstable ffi_return_twice attribute

This PR implements [RFC2633](https://github.com/rust-lang/rfcs/pull/2633)

r? @eddyb
2019-02-24 14:15:55 +00:00
bors
e17c48e2f2 Auto merge of #58691 - Centril:rollup, r=Centril
Rollup of 6 pull requests

Successful merges:

 - #57364 (Improve parsing diagnostic for negative supertrait bounds)
 - #58183 (Clarify guarantees for `Box` allocation)
 - #58442 (Simplify the unix `Weak` functionality)
 - #58454 (Refactor Windows stdio and remove stdin double buffering )
 - #58511 (Const to op simplification)
 - #58642 (rustdoc: support methods on primitives in intra-doc links)

Failed merges:

r? @ghost
2019-02-24 06:59:13 +00:00
Mazdak Farrokhzad
f01ebc56dc
Rollup merge of #58642 - tspiteri:intra-rustdoc-prim-method, r=GuillaumeGomez
rustdoc: support methods on primitives in intra-doc links

Fixes #58598.
2019-02-24 05:56:02 +01:00
Mazdak Farrokhzad
ae646687e0
Rollup merge of #57364 - hdhoang:33418_negative_bounds, r=estebank
Improve parsing diagnostic for negative supertrait bounds

closes #33418

r? @estebank
2019-02-24 05:55:55 +01:00
bors
7cb3ee453b Auto merge of #58304 - gnzlbg:simd_saturated, r=nagisa
Add generic simd saturated add/sub intrinsics

r? @eddyb
2019-02-24 04:16:12 +00:00
bors
f573049729 Auto merge of #58232 - ljedrz:HirIdification_continued, r=Zoxc
HirId-ify intravisit

A big step towards https://github.com/rust-lang/rust/pull/57578.

This affects mostly `hir::{collector, intravisit}` and `rustc::lint`.
2019-02-24 00:24:16 +00:00
Trevor Spiteri
bde4d1945c rustdoc: support methods on primitives in intra-doc links 2019-02-23 18:01:26 +01:00
gnzlbg
94aa74004e Use E0724 instead of E0723 as an error code 2019-02-23 16:24:14 +01:00
gnzlbg
fcc0b3e398 Fix attribute check 2019-02-23 15:48:40 +01:00
gnzlbg
76403e5742 Use pattern to match attributes 2019-02-23 15:48:40 +01:00
gnzlbg
52ba07dbe6 Correct error message 2019-02-23 15:48:40 +01:00
gnzlbg
c4b46ace55 Implement ffi_returns_twice attribute 2019-02-23 15:48:40 +01:00
Mazdak Farrokhzad
d038fb2a88
Rollup merge of #58658 - pmccarter:align_msg, r=matthewjasper
Add expected/provided byte alignments to validation error message

Fixes #58617
2019-02-23 09:25:37 +01:00
Mazdak Farrokhzad
c2ad75e364
Rollup merge of #58648 - pnkfelix:issue-23926-update-tests, r=nikomatsakis
Update tests to account for cross-platform testing and miri.

Fix #23926
2019-02-23 09:25:34 +01:00
Mazdak Farrokhzad
18dd2d2fbe
Rollup merge of #58526 - pmccarter:master, r=estebank
Special suggestion for illegal unicode curly quote pairs

Fixes #58436

Did not end up expanding the error message span to include the full string literal since I figured the start of the token was the issue, while the help suggestion span would include up to the closing quotation mark.

The look ahead logic does not affect the reader position, not sure if that is an issue (if eg it should still continue to parse after the closing quote without erroring out).
2019-02-23 09:25:27 +01:00
Mazdak Farrokhzad
3688643293
Rollup merge of #58353 - matthewjasper:typeck-pattern-constants, r=arielb1
Check the Self-type of inherent associated constants

r? @arielb1
2019-02-23 09:25:23 +01:00
Mazdak Farrokhzad
1d6657dd0a
Rollup merge of #58199 - clintfred:partial-move-err-msg, r=estebank
Add better error message for partial move

closes #56657

r? @davidtwco
2019-02-23 09:25:17 +01:00
Hoàng Đức Hiếu
7cfddfb4e4 Improve parsing diagnostic for negative supertrait bounds 2019-02-23 07:58:16 +07:00
Patrick McCarter
d0c110f2c6 #58658 bless after line split for tidy 2019-02-22 19:23:03 -05:00
Patrick McCarter
5952c610a7 tidy line length override #58617 2019-02-22 17:07:13 -05:00
Patrick McCarter
8ee1c0708a Change byte align message wording #58617 2019-02-22 16:36:39 -05:00
Patrick McCarter
5f27a25cf4 Invalid byte alignment expected/provided in message #58617 2019-02-22 15:49:07 -05:00
Felix S. Klock II
b72ba0559c Switch from error patterns to //~ ERROR markers.
AFAICT, we do not have the same const-eval issues that we used to when
rust-lang/rust#23926 was filed. (Probably because of the switch to
miri for const-evaluation.)
2019-02-22 16:07:15 +01:00
Felix S. Klock II
e555854f9d Make target pointer-width specific variants of (very old) huge-array-simple.rs test.
(and now unignore the test since it shouldn't break tests of
cross-compiles anymore.)
2019-02-22 15:13:07 +01:00
Mazdak Farrokhzad
bcb7dce75c
Rollup merge of #58555 - scottmcm:try-2015, r=Centril
Add a note about 2018e if someone uses `try {` in 2015e

Inspired by https://github.com/rust-lang/rust/issues/58491, where a `try_blocks` example was accidentally run in 2015, which of course produces a bunch of errors.

What's the philosophy about gating for this?  The keyword is stably a keyword in 2018, so I haven't gated it for now but am not mentioning what the keyword _does_.  Let me know if I should do differently.

Resolves #53672
2019-02-22 14:58:02 +01:00
Mazdak Farrokhzad
894141b57d
Rollup merge of #58198 - igorsdv:suggest-removing-parentheses-surrounding-lifetimes, r=estebank
Suggest removing parentheses surrounding lifetimes

Fixes #57386.

r? @estebank
2019-02-22 14:57:59 +01:00
Mazdak Farrokhzad
ec8ef1836a
Rollup merge of #58059 - RalfJung:before_exec, r=alexcrichton
deprecate before_exec in favor of unsafe pre_exec

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

As per the [lang team decision](https://github.com/rust-lang/rust/issues/39575#issuecomment-442993358):

> The language team agreed that before_exec should be unsafe, and leaves the details of a transition plan to the libs team.

Cc @alexcrichton @rust-lang/libs how would you like to proceed?
2019-02-22 14:57:56 +01:00
bors
1005f3bac7 Auto merge of #56113 - spastorino:erroneous-loop-diagnostic-in-nll, r=pnkfelix
Erroneous loop diagnostic in nll

Closes #53773

r? @nikomatsakis
2019-02-22 06:52:39 +00:00
Matthew Jasper
5ffc919726 Move the exit block of the match to the end 2019-02-21 19:03:34 +00:00
Matthew Jasper
fcfeb06817 Fix codegen test 2019-02-21 19:03:34 +00:00
Matthew Jasper
9c601611a0 Simplify the cleanup_post_borrowck passes 2019-02-21 19:03:34 +00:00
Matthew Jasper
bf446c80c2 Add address stability test for matches 2019-02-21 19:03:34 +00:00
Matthew Jasper
2c840ae18d Use normal mutable borrows in MIR match lowering 2019-02-21 19:03:34 +00:00
Matthew Jasper
d51b5cdd82 Clean up MIR match lowering
* Adjust fake borrows to only be live over guards.
* Remove unused `slice_len_checked` field.
* Split the methods on builder into those for matches and those for all
  kinds of pattern bindings.
2019-02-21 19:03:34 +00:00
Matthew Jasper
c15437c0c6 Improve error message and add tests for borrowck match handling 2019-02-21 19:03:33 +00:00
Niko Matsakis
33d3598e3b partially revert 904a0bde93
This preserves the error you currently get on stable for the
old-lub-glb-object.rs test.
2019-02-21 12:50:13 -05:00
Niko Matsakis
21e9478366 update test files to reflect new output
One surprise: old-lub-glb-object.rs, may indicate a bug
2019-02-21 11:32:17 -05:00
Niko Matsakis
561ce442de restore the actual leak-check 2019-02-21 11:32:17 -05:00
bors
1349c84a4f Auto merge of #58056 - nikomatsakis:issue-57843-universe-leak, r=pnkfelix
make generalization code create new variables in correct universe

In our type inference system, when we "generalize" a type T to become
a suitable value for a type variable V, we sometimes wind up creating
new inference variables. So, for example, if we are making V be some
subtype of `&'X u32`, then we might instantiate V with `&'Y u32`.
This generalized type is then related `&'Y u32 <: &'X u32`, resulting
in a region constriant `'Y: 'X`. Previously, however, we were making
these fresh variables like `'Y` in the "current universe", but they
should be created in the universe of V. Moreover, we sometimes cheat
in an invariant context and avoid creating fresh variables if we know
the result must be equal -- we can only do that when the universes
work out.

Fixes #57843

r? @pnkfelix
2019-02-20 21:12:18 +00:00