Commit graph

26349 commits

Author SHA1 Message Date
gnzlbg
5ecb7eb161 Remove fail tests 2019-09-25 14:32:57 +02:00
gnzlbg
02bfbf96c7 Clean tests 2019-09-25 14:05:39 +02:00
gnzlbg
e74a268db5 Test errors 2019-09-25 13:39:20 +02:00
gnzlbg
5976674a71 Refactor 2019-09-25 12:54:23 +02:00
gnzlbg
3a6e96e8bc Allow simd_insert and simd_extract in const_fn 2019-09-25 10:28:53 +02:00
gnzlbg
e6239bb817 Add some more tests 2019-09-24 17:02:01 +02:00
gnzlbg
f0bbd2b71c Move tests to SIMD subdirectory 2019-09-24 16:52:03 +02:00
gnzlbg
75d8199ab1 Add a fail test 2019-09-24 16:48:17 +02:00
gnzlbg
03ac54aed6 Add const-eval support for SIMD types, insert, and extract 2019-09-24 16:14:43 +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
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
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
Sam Radhakrishan
a2a57bc6cf Fixes #63962. Hint about missing tuple parentheses in patterns 2019-09-22 00:00:34 +05:30
Guanqun Lu
e001c5f9d8 unify errors for tuple/struct variants
fix #63983
2019-09-21 23:38:35 +08:00
gnzlbg
d434496973 remove feature 2019-09-21 16:09:38 +02: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
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
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
Josh Stone
c3f72d1c09 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`.
2019-09-20 16:06:32 -07:00
Josh Stone
9f374da467 Exempt extern "Rust" from improper_ctypes
It should be fine for Rust ABIs to involve any Rust type.
2019-09-20 15:39:34 -07:00
gnzlbg
9cf9030e1c Allow using fn pointers in const fn behind const_fn_ptr gate 2019-09-20 18:39:13 +02:00
bors
97e58c0d32 Auto merge of #64584 - nikomatsakis:issue-64477-generator-capture-types, r=eddyb
record fewer adjustment types in generator witnesses, avoid spurious drops in MIR construction

Don't record all intermediate adjustment types -- That's way more than is needed, and winds up recording types that will never appear in MIR.

Note: I'm like 90% sure that this logic is correct, but this stuff is subtle and can be hard to keep straight.  However, the risk of this PR is fairly low -- if we miss types here, I believe the most common outcome is an ICE.

This fixes the original issue cited by #64477, but I'm leaving the issue open for now since there may be other cases we can detect and improve in a targeted way.

r? @Zoxc
2019-09-20 15:35:51 +00:00
bors
72252646a8 Auto merge of #64498 - estebank:point-at-arg, r=Centril
When possible point at argument causing item obligation failure

Fix https://github.com/rust-lang/rust/issues/41781, fix https://github.com/rust-lang/rust/issues/42855, fix https://github.com/rust-lang/rust/issues/46658, fix https://github.com/rust-lang/rust/issues/48099, fix https://github.com/rust-lang/rust/issues/63143.
2019-09-20 07:53:23 +00:00
Niko Matsakis
77fd0a7649 add a mir-opt test that we don't add the spurious drop 2019-09-19 16:12:48 -04:00
Esteban Küber
2fbd6927a5 When possible, suggest fn call 2019-09-19 12:10:23 -07:00
Esteban Küber
fa496c9ded Ignore obligations coming from desugared call spans 2019-09-19 12:10:23 -07:00
Esteban Küber
02e3fb89a7 When possible point at argument causing item obligation failure 2019-09-19 12:10:23 -07:00
Niko Matsakis
1962d75c10 fix mir-opt tests 2019-09-19 14:30:05 -04:00
Niko Matsakis
2655663345 fix tests for 2018 2019-09-19 13:15:54 -04:00
Mazdak Farrokhzad
908636f510
Rollup merge of #64601 - grovesNL:two-backticks, r=jonas-schievink
Fix backticks in documentation

Fix a few typos in comments/documentation where backticks were doubled-up on one side.
2019-09-19 18:31:40 +02:00
Mazdak Farrokhzad
3c286826aa
Rollup merge of #64592 - Aaron1011:feature/unreachable-span, r=Centril
Point at original span when emitting unreachable lint

Fixes #64590

When we emit an 'unreachable' lint, we now add a note pointing at the
expression that actually causes the code to be unreachable (e.g.
`return`, `break`, `panic`).

This is especially useful when macros are involved, since a diverging
expression might be hidden inside of a macro invocation.
2019-09-19 18:31:39 +02:00
Mazdak Farrokhzad
bda52e558e
Rollup merge of #63448 - RalfJung:miri-discriminant, r=eddyb
fix Miri discriminant handling

This can be reviewed commit-by-commit fairly well.

The Miri side is at https://github.com/rust-lang/miri/pull/903.

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

r? @eddyb @oli-obk
2019-09-19 18:31:37 +02:00
Niko Matsakis
b2c51c24c9 avoid generating drops for moved operands of calls
Currently, after a CALL terminator is created in MIR, we insert DROP
statements for all of its operands -- even though they were just moved
shortly before! These spurious drops are later removed, but not before
causing borrow check errors.

This PR series modifies the drop code to track operands that were
moved and avoid creating drops for them.

Right now, I'm only using this mechanism for calls, but it seems
likely it could be used in more places.
2019-09-19 11:50:00 -04:00
Joshua Groves
37bafeafe7 Fix backticks in documentation 2019-09-18 23:17:36 -06:00
Mazdak Farrokhzad
cad2d5840b
Rollup merge of #64591 - jamesmunns:grammar-fix, r=jonas-schievink
Fix a minor grammar nit, update UI tests

Minor fix, but I noticed it while debugging some code
2019-09-19 04:53:12 +02:00
Mazdak Farrokhzad
0835100412
Rollup merge of #64554 - lqd:polonius_tests4, r=nikomatsakis
Polonius: more `ui` test suite fixes

Since #62736, new tests have been added, and the `run-pass` suite was merged into the `ui` suite.

This PR adds the missing tests expectations for Polonius, and updates the existing ones where the NLL output has changed in some manner (e.g. ordering of notes)

Those are the trivial cases, but a more-detailed explanation is available [in this write-up](https://hackmd.io/CjYB0fs4Q9CweyeTdKWyEg?both#26-async-awaitasync-borrowck-escaping-closure-errorrs-outputs-from-NLL-Polonius-diff) starting at test case 26: they are only differing in diagnostics and instances of other existing test cases differences.

Only 3 of the 9020 tests are still "failing" at the moment (1 failure, 2 OOMs).

r? @nikomatsakis
2019-09-19 04:53:09 +02:00
Esteban Küber
479ce39939 Add explanation to type mismatch involving type params and assoc types 2019-09-18 17:30:35 -07:00
Aaron Hill
9e777eb45d
Some formatting cleanup 2019-09-18 19:31:38 -04:00
Aaron Hill
cd4b468e07
Make note better when all arms in a match diverge 2019-09-18 19:19:55 -04:00
James Munns
333230fd14 Restore whitespace 2019-09-19 00:50:03 +02:00
Aaron Hill
822393d690
Point at original span when emitting unreachable lint
Fixes #64590

When we emit an 'unreachable' lint, we now add a note pointing at the
expression that actually causes the code to be unreachable (e.g.
`return`, `break`, `panic`).

This is especially useful when macros are involved, since a diverging
expression might be hidden inside of a macro invocation.
2019-09-18 18:35:10 -04:00
James Munns
f233a4c18b Fix a minor grammar nit, update UI tests 2019-09-19 00:16:16 +02:00
Niko Matsakis
d95a7768a1 don't record all intermediate adjustment types
That's way more than is needed, and winds up recording types
that will never appear in MIR.
2019-09-18 14:33:14 -04:00
Tyler Mandry
0fd7a2db3d
Rollup merge of #64578 - max-sixty:22656-lldb-8, r=alexcrichton
Fix issue22656 with LLDB 8

Closes https://github.com/rust-lang/rust/issues/64074
2019-09-18 10:58:07 -07:00
Maximilian Roos
445af68c23
fix debuginfo/issue22656 with LLDB 8 2019-09-18 10:42:55 -04:00
Tyler Mandry
76d34f3435
Rollup merge of #64528 - Aaron1011:fix/proc-macro-type, r=alexcrichton
Load proc macro metadata in the correct order.

Serialized proc macro metadata is assumed to have a one-to-one
correspondence with the entries in static array generated by proc_macro_harness.
However, we were previously serializing proc macro metadata in a
different order than proc macros were laied out in the static array.
This lead to us associating the wrong data with a proc macro when
generating documentation, causing Rustdoc to generate incorrect docs for
proc macros.

This commit keeps track of the order in which we insert proc macros into
the generated static array. We use this same order when serializing proc
macro metadata, ensuring that we can later associate the metadata for a
proc macro with its entry in the static array.

Fixes #64251
2019-09-17 21:27:26 -07:00
Tyler Mandry
a8aa5114bf
Rollup merge of #64486 - matthewjasper:hygiene-debugging, r=petrochenkov
Print out more information for `-Zunpretty=expanded,hygiene`

I've found this helpful when trying to understand how hygiene works.

Closes #16420
2019-09-17 21:27:22 -07:00
Aaron Hill
3daa8bd2e4
Generate proc macro harness in AST order.
This ensures that we match the order used by proc macro metadata
serialization.

Fixes #64251
2019-09-17 19:10:10 -04:00