Commit graph

30399 commits

Author SHA1 Message Date
Dylan DPC
085c16d552
Rollup merge of #72923 - Patryk27:fix/52468, r=estebank
Improve E0433, so that it suggests missing imports

Closes #52468
2020-06-04 12:12:47 +02:00
Dylan DPC
21ac561ab7
Rollup merge of #72718 - estebank:impl-trait-obligation-failure, r=matthewjasper
Add regression test for #72554

Fix #72554.
2020-06-04 12:12:40 +02:00
Dylan DPC
7973d9381f
Rollup merge of #72900 - jsgf:no-unused-pathless, r=petrochenkov
Don't count pathless --extern for unused-crate-dependencies warnings

`--extern proc_macro` is used to add the proc_macro crate to the extern
prelude for all procmacros. In general pathless `--extern` only references
sysroot/standard libraries and so should be exempt from
unused-crate-dependencies warnings.

r? @petrochenkov
2020-06-03 18:05:39 +02:00
bors
ff4aff6ce0 Auto merge of #70107 - lcnr:issue68977, r=eddyb
WF-check all ty::Const's, not just array lengths.

fixes #68977

This PR removes the special case for array length in `wf::compute` and
checks the well formedness of all consts.

Changes `PredicateKind::WellFormed` to take a `GenericArg` and updates `wf::obligations`.
2020-06-03 08:43:11 +00:00
Dylan DPC
0050b8817b
Rollup merge of #72902 - cuviper:fuse-covariant, r=nikomatsakis
Add a test to ensure Fuse stays covariant

When #70502 attempted to specialize the data types in `Fuse`, one of the problems we found was that it broke variance. This was also realized when `Fuse` was first added, https://github.com/rust-lang/rust/pull/35656#discussion-diff-74995079, but now this PR adds a test so we don't forget again.
2020-06-03 02:39:07 +02:00
Dylan DPC
69a1ac3891
Rollup merge of #72848 - camelid:fix-72815, r=varkor
Correct generic parameter ordering in error note for E0747

Fixes #72815.

r? @varkor
2020-06-03 02:39:05 +02:00
Dylan DPC
9c3ac0c9bb
Rollup merge of #72820 - jonas-schievink:instcombine-uninit, r=oli-obk
InstCombine: Don't optimize `&mut *x` into `x`

Fixes https://github.com/rust-lang/rust/issues/72797
2020-06-03 02:39:03 +02:00
Patryk Wychowaniec
d31d215c56
Improve E0433, so that it suggests missing imports 2020-06-02 20:41:25 +02:00
Bastian Kauschke
631ac9c472 update tests 2020-06-02 15:02:36 +02:00
Bastian Kauschke
81831e124e add WellFormedConst predicate 2020-06-02 15:02:36 +02:00
Tom Eccles
81df5ac241 compiletest: Add name directive for remote runners
Allow tests to use
// ignore-remote
to ignore the test when using remote-test-{client,server}. In most
situations this would be covered by
// ignore-cross-compile
but I see no reason that a non-cross compiled remote test runner
shouldn't work.
2020-06-02 14:00:18 +01:00
Yuki Okushi
b7ec7bd5b7
Rollup merge of #72893 - RalfJung:unleash-tls, r=ecstatic-morse
test miri-unleash TLS accesses

Finally gets rid of `IS_SUPPORTED_IN_MIRI`. :-)

I also added a test for the new `asm!` while I am at it.

r? @ecstatic-morse Cc @rust-lang/wg-const-eval
2020-06-02 13:07:27 +09:00
Yuki Okushi
0007924cd0
Rollup merge of #72825 - Amanieu:asm-warning, r=davidtwco
Clarify errors and warnings about the transition to the new asm!

Hopefully addresses the concerns from https://github.com/rust-lang/rust/pull/71007#issuecomment-636412905.
2020-06-02 13:07:17 +09:00
Yuki Okushi
db0c346395
Rollup merge of #72795 - petrochenkov:identgroup, r=nikomatsakis
Add a test for `$:ident` in proc macro input

cc https://github.com/rust-lang/rust/issues/72545#issuecomment-636388019
2020-06-02 13:07:13 +09:00
Yuki Okushi
8a68fc6ff4
Rollup merge of #72775 - JohnTitor:await-sugg, r=estebank
Return early to avoid ICE

Fixes #72766
2020-06-02 13:07:12 +09:00
Josh Stone
a3344d1a3a Add a test to ensure Fuse stays covariant 2020-06-01 17:47:26 -07:00
Jeremy Fitzhardinge
3dd6f2cd75 Don't count pathless --extern options for unused-crate-dependencies warnings
`--extern proc_macro` is used to add the proc_macro crate to the extern
prelude for all procmacros. In general pathless `--extern` only references
sysroot/standard libraries and so should be exempt from
unused-crate-dependencies warnings.
2020-06-01 16:29:25 -07:00
Ralf Jung
4f30c68937
Fix comment
Co-authored-by: Aaron Hill <aa1ronham@gmail.com>
2020-06-02 00:55:11 +02:00
Ralf Jung
d022603a45 test miri-unleash TLS accesses 2020-06-01 20:53:45 +02:00
Esteban Küber
eb8d9002fa Add test for #72554. 2020-06-01 09:44:05 -07:00
bors
d3cba254e4 Auto merge of #71192 - oli-obk:eager_alloc_id_canonicalization, r=wesleywiser
Make TLS accesses explicit in MIR

r? @rust-lang/wg-mir-opt

cc @RalfJung @vakaras for miri thread locals

cc @bjorn3 for cranelift

fixes #70685
2020-06-01 11:44:51 +00:00
camelid
718d28cf85 Correct generic parameter ordering in error note 2020-05-31 20:45:08 -07:00
Dylan DPC
cf4683665f
Rollup merge of #72823 - matthewjasper:describe-queries, r=eddyb
Add descriptions for all queries

This also removes the default description for queries with DefId keys and makes the macro validate that a description is provided.

cc  #72730
r? @eddyb
2020-06-01 03:14:12 +02:00
Dylan DPC
8e83a7e126
Rollup merge of #72807 - xiaotianrandom:fix-assoc-type-diagnostics, r=estebank
Avoid setting wrong obligation cause span of associated type mismatch

Removes code that sets wrong obligation cause span of associated type mismatch. See the linked issue for details.

Closes #72806.
2020-05-31 21:30:01 +02:00
Matthew Jasper
8894bd220b Add descriptions for all queries 2020-05-31 20:15:32 +01:00
Amanieu d'Antras
d49020573c Clarify errors and warnings about the transition to the new asm! 2020-05-31 18:25:05 +01:00
Jonas Schievink
309661e84f InstCombine: Don't optimize &mut *x into x 2020-05-31 16:22:23 +02:00
Ralf Jung
b714f5c9ac
Rollup merge of #72715 - estebank:trailing-comma-where, r=petrochenkov
Account for trailing comma when suggesting `where` clauses

Fix #72693.
2020-05-31 12:03:24 +02:00
XIAO Tian
3bf9eb0f7a Add a test for wrong assoc type diagnostics 2020-05-31 12:13:30 +08:00
Vadim Petrochenkov
81e06dac84 Add a test for $:ident in proc macro input 2020-05-31 00:24:56 +03:00
Vadim Petrochenkov
4d5ce340cd test-macros: Avoid always producing errors in #[derive(Print)] 2020-05-31 00:17:33 +03:00
Ralf Jung
356d1e9f4f
Rollup merge of #72772 - RalfJung:valid-char, r=petrochenkov
miri validation: clarify valid values of 'char'

The old text said "expected a valid unicode codepoint", which is not actually correct -- it has to be a scalar value (which is a code point that is not part of a surrogate pair).
2020-05-30 23:09:00 +02:00
Ralf Jung
32481bc80a
Rollup merge of #72757 - petrochenkov:shebang, r=varkor
rustc_lexer: Optimize shebang detection slightly

Sorry, I just couldn't resist.
It shouldn't make any difference in practice.

Also, documented a previously unnoticed case with doc comments treated as regular comments during shebang detection.
2020-05-30 23:08:58 +02:00
Ralf Jung
65a02f1841
Rollup merge of #72668 - awoimbee:give-fn-parenthetical-notation-parentheses, r=estebank
Fix missing parentheses Fn notation error

Fixes  #72611
Well, fixes the error output, I think E0658 is the right error to throw in this case so I didn't change that
2020-05-30 23:08:53 +02:00
Ralf Jung
ffe329250b
Rollup merge of #72666 - ivanloz:profile_emit_flag, r=matthewjasper
Add -Z profile-emit=<path> for Gcov gcda output.

Adds a -Z flag to control the file path that the Gcov gcda output is
written to during runtime. This flag expects a path and filename, e.g.
-Z profile-emit=gcov/out/lib.gcda.

This works similar to GCC/Clang's -fprofile-dir flag which allows
control over the output path for gcda coverage files.
2020-05-30 23:08:51 +02:00
Ralf Jung
320de71cdd
Rollup merge of #72657 - flip1995:impl_lint_pass-ty, r=matthewjasper
Allow types (with lifetimes/generics) in impl_lint_pass

cc https://github.com/rust-lang/rust-clippy/pull/5279#discussion_r430790267

This allows to implement `LintPass` for types with lifetimes and/or generics. The only thing, I'm not sure of is the `LintPass::name` function, which now includes the lifetime(s) (which will be `'_` most of the time) in the name returned for the lint pass, if it exists. But I don't think that this should be a problem, since the `LintPass::name` is never used for output for the user (?).
2020-05-30 23:08:49 +02:00
Ralf Jung
40fb1913e7
Rollup merge of #72637 - euclio:env-hygiene, r=davidtwco
expand `env!` with def-site context

Similar to #66349.

Fixes rust-lang/rust-clippy#5619.
2020-05-30 23:08:46 +02:00
Ralf Jung
fadfcb644e
Rollup merge of #72625 - Amanieu:asm-srcloc, r=petrochenkov
Improve inline asm error diagnostics

Previously we were just using the raw LLVM error output (with line, caret, etc) as the diagnostic message, which ends up looking rather out of place with our existing diagnostics.

The new diagnostics properly format the diagnostics and also take advantage of LLVM's per-line `srcloc` attribute to map an error in inline assembly directly to the relevant line of source code.

Incidentally also fixes #71639 by disabling `srcloc` metadata during LTO builds since we don't know what crate it might have come from. We can only resolve `srcloc`s from the currently crate since it indexes into the source map for the current crate.

Fixes #72664
Fixes #71639

r? @petrochenkov

### Old style

```rust
#![feature(llvm_asm)]

fn main() {
    unsafe {
        let _x: i32;
        llvm_asm!(
            "mov $0, $1
             invalid_instruction $0, $1
             mov $0, $1"
             : "=&r" (_x)
             : "r" (0)
             :: "intel"
        );
    }
}
```

```
error: <inline asm>:3:14: error: invalid instruction mnemonic 'invalid_instruction'
             invalid_instruction ecx, eax
             ^~~~~~~~~~~~~~~~~~~

  --> src/main.rs:6:9
   |
6  | /         llvm_asm!(
7  | |             "mov $0, $1
8  | |              invalid_instruction $0, $1
9  | |              mov $0, $1"
...  |
12 | |              :: "intel"
13 | |         );
   | |__________^
```

### New style

```rust
#![feature(asm)]

fn main() {
    unsafe {
        asm!(
            "mov {0}, {1}
             invalid_instruction {0}, {1}
             mov {0}, {1}",
            out(reg) _,
            in(reg) 0i64,
        );
    }
}
```

```
error: invalid instruction mnemonic 'invalid_instruction'
 --> test.rs:7:14
  |
7 |              invalid_instruction {0}, {1}
  |              ^
  |
note: instantiated into assembly here
 --> <inline asm>:3:14
  |
3 |              invalid_instruction rax, rcx
  |              ^^^^^^^^^^^^^^^^^^^
```
2020-05-30 23:08:44 +02:00
Esteban Küber
83f6f22358 Tweak wording and spans of 'static dyn Trait/impl Trait requirements 2020-05-30 10:22:27 -07:00
Esteban Küber
224ad326ea Account for enclosing item when suggesting new lifetime name 2020-05-30 10:22:27 -07:00
Esteban Küber
8f7ee34379 Tweak type parameter errors to reduce verbosity 2020-05-30 10:22:26 -07:00
Esteban Küber
1d9472b470 Update nll tests 2020-05-30 10:22:26 -07:00
Esteban Küber
731ea85f21 review comment: tweak wording and account for span overlap 2020-05-30 10:22:26 -07:00
Esteban Küber
65f492be12 Account for returned dyn Trait evaluating to 'static lifetime
Provide a suggestion for `dyn Trait + '_` when possible.
2020-05-30 10:22:26 -07:00
Esteban Küber
a724d9a4fb Fix NLL output 2020-05-30 10:21:58 -07:00
Esteban Küber
99d9ccd547 Improve output of argument anonymous borrow missing annotation involving opaque return type
Go from

```
error[E0495]: cannot infer an appropriate lifetime due to conflicting requirements
  --> file8.rs:22:5
   |
22 | /     move || {
23 | |         *dest = g.get();
24 | |     }
   | |_____^
   |
note: first, the lifetime cannot outlive the anonymous lifetime #1 defined on the function body at 18:1...
  --> file8.rs:18:1
   |
18 | / fn bat<'a, G: 'a, T>(g: G, dest: &mut T) -> impl FnOnce() + '_ + 'a
19 | | where
20 | |     G: Get<T>
21 | | {
...  |
24 | |     }
25 | | }
   | |_^
note: ...so that the types are compatible
  --> file8.rs:22:5
   |
22 | /     move || { //~ ERROR cannot infer an appropriate lifetime
23 | |         *dest = g.get();
24 | |     }
   | |_____^
   = note: expected  `&mut T`
              found  `&mut T`
note: but, the lifetime must be valid for the lifetime `'a` as defined on the function body at 18:8...
  --> file8.rs:18:8
   |
18 | fn bat<'a, G: 'a, T>(g: G, dest: &mut T) -> impl FnOnce() + '_ + 'a
   |        ^^
note: ...so that return value is valid for the call
  --> file8.rs:18:45
   |
18 | fn bat<'a, G: 'a, T>(g: G, dest: &mut T) -> impl FnOnce() + '_ + 'a
   |                                             ^^^^^^^^^^^^^^^^^^^^^^^
```

to

```
error[E0621]: explicit lifetime required in the type of `dest`
  --> file8.rs:18:45
   |
18 | fn bat<'a, G: 'a, T>(g: G, dest: &mut T) -> impl FnOnce() + '_ + 'a
   |                                  ------     ^^^^^^^^^^^^^^^^^^^^^^^ lifetime `'a` required
   |                                  |
   |                                  help: add explicit lifetime `'a` to the type of `dest`: `&'a mut T`
   ```
2020-05-30 10:21:58 -07:00
Esteban Küber
f49ebbb891 Account for missing lifetime in opaque return type
When encountering an opaque closure return type that needs to bound a
lifetime to the function's arguments, including borrows and type params,
provide appropriate suggestions that lead to working code.

Get the user from

```rust
fn foo<G, T>(g: G, dest: &mut T) -> impl FnOnce()
where
    G: Get<T>
{
    move || {
        *dest = g.get();
    }
}
```

to

```rust
fn foo<'a, G: 'a, T>(g: G, dest: &'a mut T) -> impl FnOnce() +'a
where
    G: Get<T>
{
    move || {
        *dest = g.get();
    }
}
```
2020-05-30 10:19:41 -07:00
Arthur Woimbée
c54d4fe93f Test ui suggestion fn trait notation 2020-05-30 18:40:42 +02:00
Ralf Jung
69310dea89
Rollup merge of #72607 - Amanieu:fix-72570, r=oli-obk
Eagerly lower asm sub-expressions to HIR even if there is an error

Fixes #72570

r? @oli-obk
2020-05-30 13:45:15 +02:00
Ralf Jung
e4c35246fc
Rollup merge of #72585 - Aaron1011:feature/opt-item-tokens, r=petrochenkov
Only capture tokens for items with outer attributes

Suggested by @petrochenkov in https://github.com/rust-lang/rust/issues/43081#issuecomment-633389225
2020-05-30 13:45:13 +02:00