Commit graph

10975 commits

Author SHA1 Message Date
Camelid
8d80cc5679 Fix duplicate options error
The UI isn't glitching anymore.
2020-06-20 11:12:43 -07:00
Camelid
4ba66970d8 Make suggestion machine-applicable 2020-06-20 11:12:43 -07:00
Camelid
f4dfc61e84 Add more to duplicate options test 2020-06-20 11:12:43 -07:00
Camelid
b00b1a4598 Use span_suggestion instead of span_label 2020-06-20 11:12:43 -07:00
Camelid
7c5b66f328 Update duplicate options test 2020-06-20 11:12:43 -07:00
Camelid
b94b7e7f1b Make warning an error; use help instead of suggestion; clean up code
For some reason, the help message is now in a separate message, which
adds a lot of noise. I would like to try to get it back to one message.
2020-06-20 11:12:42 -07:00
Camelid
7aaadb69e4 Add UI test for duplicate asm! options warning 2020-06-20 11:12:42 -07:00
Camelid
e61411673c Update tests 2020-06-20 11:12:42 -07:00
Ralf Jung
913aac8ac2
Rollup merge of #73058 - tmiasko:aarch64-san, r=nagisa
Support sanitizers on aarch64-unknown-linux-gnu
2020-06-20 16:39:49 +02:00
Ralf Jung
5431ef6530
Rollup merge of #72600 - Aaron1011:fix/anon-const-encoding, r=varkor
Properly encode AnonConst into crate metadata

Fixes #68104

Previous, we were encoding AnonConst as a regular Const, causing us to
treat them differently after being deserialized in another compilation
session.
2020-06-20 16:39:45 +02:00
Matthew Jasper
db4826dd6c Move bounds on associated types to the type
Given `trait X { type U; }` the bound `<Self as X>::U` now lives
on the type, rather than the trait. This is feature gated on
`feature(generic_associated_types)` for now until more testing can
be done.

The also enabled type-generic associated types since we no longer
need "implies bounds".
2020-06-20 14:34:51 +01:00
Matthew Jasper
d660dbc630 Check associated type satisfy their bounds
This was currently only happening due to eager normalization, which
isn't possible if there's specialization or bound variables.
2020-06-20 14:34:50 +01:00
Oliver Scherer
53686b91ca Satisfy tidy 2020-06-20 14:15:36 +02:00
Oliver Scherer
9e88b48133 Refer just to the issue in the raw ptr cmp diagnostic instead of explaining everything in the diagnostic 2020-06-20 14:09:07 +02:00
Donough Liu
f1e07103d3 Prevent incorrect help message for dereference suggestion 2020-06-20 20:00:36 +08:00
Matthew Jasper
04e589ced8 Consider fewer predicates for projection candidates
We now require that projection candidates are applicable with the
idenitity substs of the trait, rather than allowing predicates that are
only applicable for certain substs.
2020-06-20 12:13:21 +01:00
Matthew Jasper
29272fc514 Correctly handle binders inside trait predicates 2020-06-20 12:13:20 +01:00
David Wood
2e781ddacc
lint: normalize projections using opaque types
This commit normalizes projections which contain opaque types (opaque types
are otherwise linted against, which is would have previously made the
test cases added in this commit fail).

Signed-off-by: David Wood <david@davidtw.co>
2020-06-20 12:07:23 +01:00
Donough Liu
ef68bf3929 Try to suggest dereferences when trait selection failed. 2020-06-20 18:53:59 +08:00
Tomasz Miąsko
2851c9ffb5 Support sanitizers on aarch64-unknown-linux-gnu 2020-06-20 09:48:14 +02:00
Rakshith Ravi
0624a5a063 Squashed all commits 2020-06-20 13:00:16 +05:30
jumbatm
556b7baca2 Update existing test cases.
- Allow ClashingExternDecl for lint-dead-code-3
- Update test case for #5791
- Update test case for #1866
- Update extern-abi-from-macro test case
2020-06-20 16:54:32 +10:00
jumbatm
8f079522e4 Add clashing-extern-fn.rs stderr. 2020-06-20 16:54:32 +10:00
jumbatm
a540b1b38d Add ClashingExternDecl test case. 2020-06-20 16:54:32 +10:00
Manish Goregaokar
61f8c3ef27
Rollup merge of #73452 - matthewjasper:auto-rec, r=nikomatsakis
Unify region variables when projecting associated types

This is required to avoid cycles when evaluating auto trait predicates.
Notably, this is required to be able add Chalk types to `CtxtInterners` for `cfg(parallel_compiler)`.

r? @nikomatsakis
2020-06-19 19:43:07 -07:00
Manish Goregaokar
17b80d947d
Rollup merge of #73347 - tmiasko:incompatible-sanitizers, r=nikic
Diagnose use of incompatible sanitizers

Emit an error when incompatible sanitizer are configured through command
line options. Previously the last one configured prevailed and others
were silently ignored.

Additionally use a set to represent configured sanitizers, making it
possible to enable multiple sanitizers at once. At least in principle,
since currently all of them are considered to be incompatible with
others.
2020-06-19 19:42:55 -07:00
Manish Goregaokar
2d1bd57e60
Rollup merge of #73027 - doctorn:issue-72690, r=estebank
Make `need_type_info_err` more conservative

Makes sure arg patterns we are going to suggest on are actually contained within the span of the obligation that caused the inference error (credit to @lcnr for suggesting this fix).

There's a subtle trade-off regarding the handling of local patterns which I've left a comment about.

Resolves #72690
2020-06-19 19:42:53 -07:00
Manish Goregaokar
dac512e04a
Rollup merge of #72934 - christianpoveda:mut-borrows-in-consts, r=oli-obk
forbid mutable references in all constant contexts except for const-fns

PR to address #71212

cc: @ecstatic-morse
2020-06-19 19:42:51 -07:00
Manish Goregaokar
c0a25bec96
Rollup merge of #72791 - lcnr:coerce-refactor, r=estebank
update coerce docs and unify relevant tests

Merges `test/ui/coerce` with `test/ui/coercion`.
Updates the documentation of `librustc_typeck/check/coercion.rs`.
Adds 2 new coercion tests.
2020-06-19 19:42:49 -07:00
Manish Goregaokar
203305d095
Rollup merge of #71420 - RalfJung:specialization-incomplete, r=matthewjasper
Specialization is unsound

As discussed in https://github.com/rust-lang/rust/issues/31844#issuecomment-617013949, it might be a good idea to warn users of specialization that the feature they are using is unsound.

I also expanded the "incomplete feature" warning to link the user to the tracking issue.
2020-06-19 19:42:43 -07:00
Esteban Küber
562f4967b4 Account for multiple impl/dyn Trait in return type when suggesting '_ 2020-06-19 13:40:51 -07:00
Christian Poveda
96031e22d2
add new error code 2020-06-19 14:16:38 -05:00
Jack Huey
16ad3f302b Nits and change skip_binder to no_bound_vars for fndef 2020-06-19 14:05:14 -04:00
Jack Huey
e997375934 Test error order is non-deterministic 2020-06-19 14:05:14 -04:00
Jack Huey
a42e5a14c4 Implement fn_def_datum 2020-06-19 14:05:14 -04:00
Jack Huey
006b482794 Add compare-mode=chalk and add a little bit more implementations and fixmes 2020-06-19 14:04:30 -04:00
Christian Poveda
1f48465a01
update diagnostics for &mut in constants 2020-06-19 11:48:46 -05:00
Christian Poveda
014e605870
update tests 2020-06-19 11:48:46 -05:00
Manish Goregaokar
b443a107f8
Rollup merge of #73382 - Aaron1011:fix/self-receiver-candidates, r=petrochenkov
Only display other method receiver candidates if they actually apply

Previously, we would suggest `Box<Self>` as a valid receiver, even if
method resolution only succeeded due to an autoderef (e.g. to `&self`)
2020-06-19 09:15:16 -07:00
Manish Goregaokar
687f929c9b
Rollup merge of #73364 - joshtriplett:inline-asm, r=Amanieu
asm: Allow multiple template string arguments; interpret them as newline-separated

Allow the `asm!` macro to accept a series of template arguments, and interpret them as if they were concatenated with a '\n' between them. This allows writing an `asm!` where each line of assembly appears in a separate template string argument.

This syntax makes it possible for rustfmt to reliably format and indent each line of assembly, without risking changes to the inside of a template string. It also avoids the complexity of having the user carefully format and indent a multi-line string (including where to put the surrounding quotes), and avoids the extra indentation and lines of a call to `concat!`.

For example, rewriting the second example from the [blog post on the new inline assembly syntax](https://blog.rust-lang.org/inside-rust/2020/06/08/new-inline-asm.html) using multiple template strings:

```rust

fn main() {
    let mut bits = [0u8; 64];
    for value in 0..=1024u64 {
        let popcnt;
        unsafe {
            asm!(
                "    popcnt {popcnt}, {v}",
                "2:",
                "    blsi rax, {v}",
                "    jz 1f",
                "    xor {v}, rax",
                "    tzcnt rax, rax",
                "    stosb",
                "    jmp 2b",
                "1:",
                v = inout(reg) value => _,
                popcnt = out(reg) popcnt,
                out("rax") _, // scratch
                inout("rdi") bits.as_mut_ptr() => _,
            );
        }
        println!("bits of {}: {:?}", value, &bits[0..popcnt]);
    }
}
```

Note that all the template strings must appear before all other arguments; you cannot, for instance, provide a series of template strings intermixed with the corresponding operands.
2020-06-19 09:15:14 -07:00
Manish Goregaokar
b285d68f36
Rollup merge of #73334 - ayazhafiz:err/num-type-cannot-fit, r=estebank
Note numeric literals that can never fit in an expected type

re https://github.com/rust-lang/rust/pull/72380#discussion_r438289385

Given the toy code

```rust
fn is_positive(n: usize) {
  n > -1_isize;
}
```

We currently get a type mismatch error like the following:

```
error[E0308]: mismatched types
 --> src/main.rs:2:9
  |
2 |     n > -1_isize;
  |         ^^^^^^^^ expected `usize`, found `isize`
  |
help: you can convert an `isize` to `usize` and panic if the converted value wouldn't fit
  |
2 |     n > (-1_isize).try_into().unwrap();
  |         ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
```

But clearly, `-1` can never fit into a `usize`, so the suggestion will
always panic. A more useful message would tell the user that the value
can never fit in the expected type:

```
error[E0308]: mismatched types
 --> test.rs:2:9
  |
2 |     n > -1_isize;
  |         ^^^^^^^^ expected `usize`, found `isize`
  |
note: `-1_isize` can never fit into `usize`
 --> test.rs:2:9
  |
2 |     n > -1_isize;
  |         ^^^^^^^^
```

Which is what this commit implements.

I only added this check for negative literals because

- Currently we can only perform such a check for literals (constant
  value propagation is outside the scope of the typechecker at this
  point)
- A lint error for out-of-range numeric literals is already emitted

IMO it makes more sense to put this check in librustc_lint, but as far
as I can tell the typecheck pass happens before the lint pass, so I've
added it here.

r? @estebank
2020-06-19 09:15:10 -07:00
Manish Goregaokar
058971cef3
Rollup merge of #73300 - crlf0710:crate_level_only_check, r=petrochenkov
Implement crate-level-only lints checking.

This implements a crate_level_only flag on lints, and when it is true, it becomes an error when user tries  to specify this flag upon nodes other than crate node.

This also turns on this flag for all non_ascii_ident lints.
2020-06-19 09:15:08 -07:00
Manish Goregaokar
4910206b4a
Rollup merge of #73261 - estebank:generics-sized, r=nikomatsakis
Suggest `?Sized` when applicable for ADTs

Address #71790, fix #27964.
2020-06-19 09:15:06 -07:00
Manish Goregaokar
17064dae1a
Rollup merge of #73257 - davidtwco:issue-73249-improper-ctypes-projection, r=lcnr,varkor
ty: projections in `transparent_newtype_field`

Fixes #73249.

This PR modifies `transparent_newtype_field` so that it handles
projections with generic parameters, where `normalize_erasing_regions`
would ICE.
2020-06-19 09:15:04 -07:00
Oliver Scherer
e09b620339 Add fuzzy pointer comparison intrinsics 2020-06-19 18:13:41 +02:00
Oliver Scherer
9245ba8304 Remove the const_raw_ptr_comparison feature gate.
We can never supply a meaningful implementation of this.
Instead, the follow up commits will create two intrinsics
that approximate comparisons:

* `ptr_maybe_eq`
* `ptr_maybe_ne`

The fact that `ptr_maybe_eq(a, b)` is not necessarily the same
value as `!ptr_maybe_ne(a, b)` is a symptom of this entire
problem.
2020-06-19 18:13:41 +02:00
Ralf Jung
45aa36bae5
Rollup merge of #73280 - GuillaumeGomez:add-e0763, r=petrochenkov
Add E0763
2020-06-19 14:29:29 +02:00
Ralf Jung
0851036ae3
Rollup merge of #73044 - tmiasko:compiletest-san, r=nikomatsakis
compiletest: Add directives to detect sanitizer support

Add needs-sanitizer-{address,leak,memory,thread} directive indicating
that test requires target with support for specific sanitizer.

This is an addition to the existing needs-sanitizer-support directive
indicating that test requires a sanitizer runtime library.

The existing needs-sanitizer-support directive could be incorporated into the
new ones, but I decided to retain it, since it enables running sanitizer
codegen tests even when building of sanitizer runtime libraries is disabled.
2020-06-19 14:29:22 +02:00
Ralf Jung
70622db43d
Rollup merge of #72280 - nbdd0121:typeck, r=nikomatsakis
Fix up autoderef when reborrowing

Currently `(f)()` and `f.call_mut()` behaves differently if expression `f` contains autoderef in it. This causes a weird error in #72225.

When `f` is type checked, `Deref` is used (this is expected as we can't yet determine if we should use `Fn` or `FnMut`). When subsequently we determine the actual trait to be used, when using the `f.call_mut()` syntax the `Deref` is patched to `DerefMut`, while for the `(f)()` syntax case it is not.

This PR replicates the fixup for the first case.

Fixes #72225
Fixes #68590
2020-06-19 14:29:16 +02:00
David Wood
a730d888ae
ty: simplify transparent_newtype_field
This commit removes the normalization from `transparent_newtype_field` -
turns out it wasn't necessary and that makes it a bunch simpler -
particularly when handling projections.

Signed-off-by: David Wood <david@davidtw.co>
2020-06-19 11:16:16 +01:00