Commit Graph

99517 Commits

Author SHA1 Message Date
Aleksey Kladov
9fd75f5287 pull mbe token tree definition up 2019-09-22 20:37:59 +03:00
Aleksey Kladov
636b3543c2 docstring for mbe module 2019-09-22 20:36:35 +03:00
Aleksey Kladov
e30c5166db move mbe module to a separate file 2019-09-22 20:30:03 +03:00
Aleksey Kladov
49f849cdb7 rename tt -> mbe, part 2 2019-09-22 20:30:00 +03:00
Aleksey Kladov
827a5b2ea8 rename libsyntax::ext::tt to mbe
mbe stands for macro-by-example
2019-09-22 20:29:34 +03:00
Aleksey Kladov
645cdca9ba reduce visibility of a bunch of stuff in ext::tt 2019-09-22 20:29:31 +03:00
Mazdak Farrokhzad
ad4787a992
Clarify the "since" tidy check 2019-09-22 17:18:45 +02:00
Lzu Tao
d06de5d850 Update rls to fix build error 2019-09-22 15:02:12 +00:00
Lzu Tao
bbce971bf7 Update clippy 2019-09-22 15:02:12 +00:00
bors
4ff32c07da Auto merge of #64669 - estebank:unreachable, r=Centril
Use span label instead of note in unreachable lint

Fix #64636.
2019-09-22 06:33:01 +00:00
ben
3f2855e4a6 Infer consts consistently. Moved some logic into super_combined_consts,
also removed some duplicated logic from TypeRelation methods.
2019-09-22 17:24:09 +12:00
bors
ef906d0e3c Auto merge of #64666 - Centril:rollup-tp98vlr, r=Centril
Rollup of 9 pull requests

Successful merges:

 - #63907 (Add explanation to type mismatch involving type params and assoc types)
 - #64615 (rustbuild: Turn down compression on exe installers)
 - #64617 (rustbuild: Turn down compression on msi installers)
 - #64618 (rustbuild: Improve output of `dist` step)
 - #64619 (Fixes #63962. Hint about missing tuple parentheses in patterns)
 - #64634 (Update to LLVM 9.0.0)
 - #64635 (Allow using fn pointers in const fn with unleash miri)
 - #64660 (unify errors for tuple/struct variants)
 - #64664 (fully remove AstBuilder)

Failed merges:

r? @ghost
2019-09-22 02:44:28 +00:00
Esteban Küber
0f2f16db53 review comments: wording 2019-09-21 18:57:37 -07:00
Esteban Küber
daed674815 review comments 2019-09-21 17:28:07 -07:00
Tshepang Lekhonkhobe
c3d791740f remove outdated comment 2019-09-22 02:23:41 +02:00
Esteban Küber
60560bc2a2 Parse assoc type bounds in generic params and provide custom diagnostic 2019-09-21 17:11:09 -07:00
Esteban Küber
9991d548c7 review comments 2019-09-21 16:34:16 -07:00
Esteban Küber
3e6b84474d Propagate types.err in locals further to avoid spurious knock-down errors 2019-09-21 16:31:27 -07:00
Mark Rousskov
8417ac67c3 Inline attribute constructors 2019-09-21 16:14:10 -04:00
Mark Rousskov
e41aa8c0d0 Inline ty_infer 2019-09-21 16:14:10 -04:00
Mark Rousskov
2aa9d29c6a Remove unused code 2019-09-21 16:14:10 -04:00
Esteban Küber
ea70fb7567 Do not trigger unreachable lint in async body and Use span labels 2019-09-21 13:04:04 -07:00
Mazdak Farrokhzad
f0e69ffb8d
Rollup merge of #64664 - matklad:remove-ast-builder, r=Mark-Simulacrum
fully remove AstBuilder

The mentioned Cargo test is fixed in https://github.com/rust-lang/cargo/pull/7210

I think this can be removed now?
2019-09-21 21:24:22 +02:00
Mazdak Farrokhzad
7eac55518a
Rollup merge of #64660 - guanqun:unify-errors-for-tuple-struct, r=estebank
unify errors for tuple/struct variants

fix #63983
2019-09-21 21:24:20 +02:00
Mazdak Farrokhzad
25bdd76a54
Rollup merge of #64635 - gnzlbg:const_fn_ptr, r=oli-obk
Allow using fn pointers in const fn with unleash miri

This allows using function pointers in const fns  when `-Zunleash-the-miri-within-you` is enabled.

If the call to the `const fn` happens in a `const`-context, the function pointer is required to point to a `const fn`:

```rust
fn non_const_fn() -> i32 { 42 }
const fn const_fn() -> i32 { 42 }
const fn foo(x: fn() -> i32) -> i32 { x() }

let x: i32 = foo(non_const_fn_ptr); // OK
let y: i32 = foo(const_fn_ptr); // OK
const X: i32 = foo(non_const_fn_ptr); // ERROR: `non_const_fn` is not `const fn`
const Y: i32 = foo(const_fn_ptr); // OK
```

r? @oli-obk
2019-09-21 21:24:19 +02:00
Mazdak Farrokhzad
05d7ae25bf
Rollup merge of #64634 - cuviper:llvm-9.0.0, r=alexcrichton
Update to LLVM 9.0.0
2019-09-21 21:24:17 +02:00
Mazdak Farrokhzad
b21ec22402
Rollup merge of #64619 - sam09:fix-63962, r=Centril
Fixes #63962. Hint about missing tuple parentheses in patterns
2019-09-21 21:24:16 +02:00
Mazdak Farrokhzad
ef8630381a
Rollup merge of #64618 - alexcrichton:improve-dist-output, r=Mark-Simulacrum
rustbuild: Improve output of `dist` step

* Pass `/Q` to `iscc` on Windows to supress the thousands of lines of
  output about compressing documentation.
* Print out what's happening before long steps
* Use `timeit` to print out timing information for long-running
  installer assemblies.
* Try to scope output of `Dist ...` to not also encompass actual build steps
2019-09-21 21:24:15 +02:00
Mazdak Farrokhzad
395ec06b6a
Rollup merge of #64617 - alexcrichton:smaller-msi, r=Mark-Simulacrum
rustbuild: Turn down compression on msi installers

This is the same as #64615 except applied to our MSI installers. The
same fix is applied effectively bringing these installers in line with
the gz tarball installers, which are about 3x faster to produce locally
and likely much faster to produce on CI.
2019-09-21 21:24:13 +02:00
Mazdak Farrokhzad
45807144a0
Rollup merge of #64615 - alexcrichton:smaller-exe, r=Mark-Simulacrum
rustbuild: Turn down compression on exe installers

The Windows dist builders are the slowest builders right now, and the
distribution phase of them is enormously slow clocking in at around 20
minutes to build all the related installers. This commit starts to
optimize these by turning down the compression level in the `exe`
installers. These aren't super heavily used so there's no great need for
them to be so ultra-compressed, so let's dial back the compression
parameters to get closer to the rest of our xz archives. This brings the
installer in line with the gz tarball installer locally, and also brings
the compression settings on par with the rest of our xz installers.
2019-09-21 21:24:12 +02:00
Mazdak Farrokhzad
13fee423c8
Rollup merge of #63907 - estebank:assoc-type-mismatch, r=oli-obk
Add explanation to type mismatch involving type params and assoc types

CC #63711
2019-09-21 21:24:11 +02:00
Mark Rousskov
67d88f607e Remove constraints argument from path_all
It was never used
2019-09-21 15:01:39 -04:00
Aleksey Kladov
53a6a2f322 fully remove AstBuilder
The mentioned Cargo test is fixed in https://github.com/rust-lang/cargo/pull/7210
2019-09-21 21:33:37 +03:00
Sam Radhakrishan
a2a57bc6cf Fixes #63962. Hint about missing tuple parentheses in patterns 2019-09-22 00:00:34 +05:30
Jakob Schikowski
c16a547012 libtest: Add --report-time flag to print test execution time 2019-09-21 19:03:14 +02:00
Guillaume Gomez
d2b873b067 update ui tests 2019-09-21 17:43:56 +02:00
Guillaume Gomez
983e035b11 add long error explanation for E0524 2019-09-21 17:43:56 +02:00
Guanqun Lu
e001c5f9d8 unify errors for tuple/struct variants
fix #63983
2019-09-21 23:38:35 +08:00
gnzlbg
9d4053f692 revert error message changes 2019-09-21 17:24:42 +02:00
gnzlbg
d434496973 remove feature 2019-09-21 16:09:38 +02:00
bors
ed8b708c1a Auto merge of #64658 - Centril:rollup-9s3raz6, r=Centril
Rollup of 9 pull requests

Successful merges:

 - #64010 (Stabilize `param_attrs` in Rust 1.39.0)
 - #64136 (Document From trait for LhsExpr in parser)
 - #64342 (factor out pluralisation remains after #64280)
 - #64347 (Add long error explanation for E0312)
 - #64621 (Add Compatibility Notes to RELEASES.md for 1.38.0)
 - #64632 (remove the extra comma after the match arm)
 - #64640 (No home directory on vxWorks)
 - #64641 (Exempt extern "Rust" from improper_ctypes)
 - #64642 (Fix the span used to suggest avoiding for-loop moves)

Failed merges:

r? @ghost
2019-09-21 14:02:02 +00:00
Mazdak Farrokhzad
97ca0737c6
Rollup merge of #64642 - cuviper:move-for-loop-snippet, r=varkor
Fix the span used to suggest avoiding for-loop moves

It was using the snippet from the "use" span, which often renders the
same, but with closures that snippet is on the start of the closure
where the value is captured. We should be using the snippet from the
span where it was moved into the `for` loop, which is `move_span`.

Fixes #64559.
2019-09-21 16:01:35 +02:00
Mazdak Farrokhzad
1486b7f91c
Rollup merge of #64641 - cuviper:extern-rust-ctypes, r=estebank
Exempt extern "Rust" from improper_ctypes

It should be fine for Rust ABIs to involve any Rust type.

Fixes #64593.
2019-09-21 16:01:34 +02:00
Mazdak Farrokhzad
6254d7a80a
Rollup merge of #64640 - Wind-River:master, r=alexcrichton
No home directory on vxWorks

r? @alexcrichton
2019-09-21 16:01:32 +02:00
Mazdak Farrokhzad
176e216c8e
Rollup merge of #64632 - guanqun:patch-1, r=jonas-schievink
remove the extra comma after the match arm

This would follow the same coding style as all the other match arms in this file.
2019-09-21 16:01:31 +02:00
Mazdak Farrokhzad
6da43dd10d
Rollup merge of #64621 - XAMPPRocky:relnotes, r=Mark-Simulacrum
Add Compatibility Notes to RELEASES.md for 1.38.0

### [Rendered](https://github.com/XAMPPRocky/rust/blob/relnotes/RELEASES.md)

r? @Mark-Simulacrum
2019-09-21 16:01:30 +02:00
Mazdak Farrokhzad
a93c0da8d2
Rollup merge of #64347 - GuillaumeGomez:E0312, r=oli-obk
Add long error explanation for E0312

Part of #61137.
2019-09-21 16:01:28 +02:00
Mazdak Farrokhzad
d021dba048
Rollup merge of #64342 - glorv:master, r=varkor
factor out pluralisation remains after #64280

there are two case that doesn't not match the original macro pattern at [here](https://github.com/rust-lang/rust/blob/master/src/librustc_lint/unused.rs#L146) and [here](https://github.com/rust-lang/rust/blob/master/src/libsyntax/parse/diagnostics.rs#L539) as the provided param is already a bool or the check condition is not `x != 1`, so I change the macro accept a boolean expr instead of number to fit all the cases.

@Centril  please review

Fixes #64238.
2019-09-21 16:01:26 +02:00
Mazdak Farrokhzad
d7e511add6
Rollup merge of #64136 - crgl:doc-from-parser-lhs, r=Centril
Document From trait for LhsExpr in parser

Add doc for From trait for converting P<Expr> and Option<ThinVec<Attribute>> to LhsExpr

As part of issue rust-lang#51430 (cc @skade).

Both of these should just be moving an address and setting a discriminant in an enum. The main thing I'm not sure about is whether it's worth documenting the branch in the From<Option<ThinVec<Attribute>>. As far as I can tell it doesn't seem like it is optimized away (although if the discriminant happened to work out you could just copy the pointer and the discriminant which might be cheaper, but that's not guaranteed). So it seems like if it's being called often, it's doubling the number of possible branch mispredictions on this Option, which could be a significant cost.

Let me know if there's anything that needs fixing and I'll get to it as soon as possible!
2019-09-21 16:01:25 +02:00
Mazdak Farrokhzad
8646c81e8a
Rollup merge of #64010 - c410-f3r:stabilize-attrs-fn, r=Centril
Stabilize `param_attrs` in Rust 1.39.0

# Stabilization proposal

I propose that we stabilize `#![feature(param_attrs)]`.

Tracking issue: #60406
Version: 1.39 (2019-09-26 => beta, 2019-11-07 => stable).

## What is stabilized

It is now possible to add outer attributes like `#[cfg(..)]` on formal parameters of functions, closures, and function pointer types. For example:

```rust
fn len(
    #[cfg(windows)] slice: &[u16],
    #[cfg(not(windows))] slice: &[u8],
) -> usize {
    slice.len()
}
```

## What isn't stabilized

* Documentation comments like `/// Doc` on parameters.

* Code expansion of a user-defined `#[proc_macro_attribute]` macro used on parameters.

* Built-in attributes other than `cfg`, `cfg_attr`, `allow`, `warn`, `deny`, and `forbid`. Currently, only the lints `unused_variables` and `unused_mut` have effect and may be controlled on parameters.

## Motivation

The chief motivations for stabilizing `param_attrs` include:

* Finer conditional compilation with `#[cfg(..)]` and linting control of variables.

* Richer macro DSLs created by users.

* External tools and compiler internals can take advantage of the additional information that the parameters provide.

For more examples, see the [RFC][rfc motivation].

## Reference guide

In the grammar of function and function pointer, the grammar of variadic tails (`...`) and parameters are changed respectively from:

```rust
FnParam = { pat:Pat ":" }? ty:Type;
VaradicTail = "...";
```

into:

```rust
FnParam = OuterAttr* { pat:Pat ":" }? ty:Type;
VaradicTail = OuterAttr* "...";
```

The grammar of a closure parameter is changed from:

```rust
ClosureParam = pat:Pat { ":" ty:Type }?;
```

into:

```rust
ClosureParam = OuterAttr* pat:Pat { ":" ty:Type }?;
```

More generally, where there's a list of formal (value) parameters separated or terminated by `,` and delimited by `(` and `)`. Each parameter in that list may optionally be prefixed by `OuterAttr+`.

Note that in all cases, `OuterAttr*` applies to the whole parameter and not just the pattern. This distinction matters in pretty printing and in turn for macros.

## History

* On 2018-10-15, @Robbepop proposes [RFC 2565][rfc], "Attributes in formal function parameter position".

* On 2019-04-30, [RFC 2565][rfc] is merged and the tracking issue is made.

* On 2019-06-12, a partial implementation was completed. The implementation was done in [#60669][60669] by @c410-f3r and the PR was reviewed by @petrochenkov and @Centril.

* On 2019-07-29, [#61238][61238] was fixed in [#61856][61856]. The issue fixed was that lint attributes on function args had no effect. The PR was written by @c410-f3r and reviewed by @matthewjasper, @petrochenkov, and @oli-obk.

* On 2019-08-02, a bug [#63210][63210] was filed wherein the attributes on formal parameters would not be passed to macros. The issue was about forgetting to call the relevant method in `fn print_arg` in the pretty printer. In [#63212][63212], written by @Centril on 2019-08-02 and reviewed by @davidtwco, the issue aforementioned was fixed.

* This PR stabilizes `param_attrs`.

## Tests

* [On Rust 2018, attributes aren't permitted on function parameters without a pattern in trait definitions.](https://github.com/rust-lang/rust/blob/master/src/test/ui/rfc-2565-param-attrs/param-attrs-2018.rs)

* [All attributes that should be allowed. This includes `cfg`, `cfg_attr`, and lints check attributes.](https://github.com/rust-lang/rust/blob/master/src/test/ui/rfc-2565-param-attrs/param-attrs-allowed.rs)

* [Built-in attributes, which should be forbidden, e.g., `#[test]`, are.](https://github.com/rust-lang/rust/blob/master/src/test/ui/rfc-2565-param-attrs/param-attrs-builtin-attrs.rs)

* [`cfg` and `cfg_attr` are properly evaluated.](https://github.com/rust-lang/rust/blob/master/src/test/ui/rfc-2565-param-attrs/param-attrs-cfg.rs)

* [`unused_mut`](46f405ec4d/src/test/ui/rfc-2565-param-attrs/param-attrs-cfg.rs) and [`unused_variables`](https://github.com/rust-lang/rust/blob/master/src/test/ui/lint/lint-unused-variables.rs) are correctly applied to parameter patterns.

* [Pretty printing takes formal parameter attributes into account.](https://github.com/rust-lang/rust/blob/master/src/test/ui/rfc-2565-param-attrs/param-attrs-pretty.rs)

## Possible future work

* Custom attributes inside function parameters aren't currently supported but it is something being worked on internally.

* Since documentation comments are syntactic sugar for `#[doc(...)]`, it is possible to allow literal `/// Foo` comments on function parameters.

[rfc motivation]: https://github.com/rust-lang/rfcs/blob/master/text/2565-formal-function-parameter-attributes.md#motivation
[rfc]: https://github.com/rust-lang/rfcs/pull/2565
[60669]: https://github.com/rust-lang/rust/pull/60669
[61856]: https://github.com/rust-lang/rust/pull/61856
[63210]: https://github.com/rust-lang/rust/issues/63210
[61238]: https://github.com/rust-lang/rust/issues/61238
[63212]: https://github.com/rust-lang/rust/pull/63212

This report is a collaborative work with @Centril.
2019-09-21 16:01:23 +02:00