Commit Graph

119607 Commits

Author SHA1 Message Date
Dylan DPC
ce1dba9918
Rollup merge of #71808 - unexge:long-err-expl-for-e0539, r=GuillaumeGomez
Add long error explanation for E0539

since this error is similar to [E0551](https://github.com/rust-lang/rust/blob/master/src/librustc_error_codes/error_codes/E0551.md) most of the content was copied from it. part of #61137.
2020-05-03 18:34:50 +02:00
Dylan DPC
44e678bf9e
Rollup merge of #71726 - ldm0:ref2ptr, r=oli-obk
Suggest deref when coercing `ty::Ref` to `ty::RawPtr` with arbitrary mutability

Fixes #71676
1. Implement dereference suggestion when coercing `ty::Ref` to `ty::RawPtr` with arbitrary mutability.
2. Extract the dereference steps into `deref_steps()`, which removes all the `use` and `pub` noise introduced by last PR #71540, and makes the code more readable.
3. Use the `remove_prefix()` closure which makes the prefix removal more readable.
4. Introduce `Applicability` as a return value of `check_ref` to suggest `Applicability::Unspecified` suggestion.

**Special**: I found it is not possible to genereate `Applicability::MachineApplicable` suggestion for situation like this:
```rust
use std::ops::Deref;
use std::ops::DerefMut;
struct Bar(u8);
struct Foo(Bar);
struct Emm(Foo);
impl Deref for Bar{
    type Target = u8;
    fn deref(&self) -> &Self::Target {
        &self.0
    }
}
impl Deref for Foo {
    type Target = Bar;
    fn deref(&self) -> &Self::Target {
        &self.0
    }
}
impl Deref for Emm {
    type Target = Foo;
    fn deref(&self) -> &Self::Target {
        &self.0
    }
}
impl DerefMut for Bar{
    fn deref_mut(&mut self) -> &mut Self::Target {
        &mut self.0
    }
}
impl DerefMut for Foo {
    fn deref_mut(&mut self) -> &mut Self::Target {
        &mut self.0
    }
}
impl DerefMut for Emm {
    fn deref_mut(&mut self) -> &mut Self::Target {
        &mut self.0
    }
}
fn main() {
    let a = Emm(Foo(Bar(0)));
    let _: *mut u8 = &a; //~ ERROR mismatched types
}
```
We may suggest `&mut ***a` here, but the `a` is not declared as mutable variable. And also when processing HIR, it's not possible to check if `a` is declared as a mutable variable (currently we do borrow checking with MIR). So we cannot ensure that suggestion when coercing immutable reference to mutable pointer is always machine applicable. Therefore I added a `Applicability` return value in `check_ref()`. And move the `immutable reference -> mutable pointer` situation into a sperate test file without `run-rustfix`. (It seems that `run-rustfix` will also adopt `Applicability::Unspecified` suggestion, which is strange)
2020-05-03 18:34:46 +02:00
Dylan DPC
5b1729030a
Rollup merge of #71663 - jumbatm:caller-handles-validation-error, r=RalfJung
Fix exceeding bitshifts not emitting for assoc. consts (properly this time, I swear!)

Fixes #69021 and fixes #71353.

As described in https://github.com/rust-lang/rust/issues/71353#issuecomment-617901923, this PR:

- adds a variant of `try_validation!` called `try_validation_pat!` that allows specific failures to be turned into validation failures (but returns the rest, unchanged), and
- allows `InvalidProgram` to be returned out of validation

r? @RalfJung
2020-05-03 18:34:41 +02:00
Dylan DPC
6f5de87d3f
Rollup merge of #71398 - ThinkChaos:feat_refcell_take, r=LukasKalbertodt
Add `RefCell::take`

Add `RefCell::take` to match `Cell` and `Option`.
I also changed a couple of calls to `.replace` to `.take`.

Tracking issue is #71395.

This is my first contribution, please tell me if there's anything I could improve, thanks!
2020-05-03 18:34:34 +02:00
Ralf Jung
182133f8c8 bless caller-location test 2020-05-03 18:04:24 +02:00
Ralf Jung
a909c039b5 remove unneeded flags; exlain why we still have const_if_match 2020-05-03 17:18:46 +02:00
Ralf Jung
f7f606d9af fmt 2020-05-03 17:12:50 +02:00
flip1995
1b155623d8
List Clippy as a subtree, instead of a submodule 2020-05-03 15:58:30 +02:00
Ralf Jung
99debecd4d warn about each skipped feature gate 2020-05-03 14:23:08 +02:00
Matthew Jasper
9e19f3a27f Correctly check comparison operators in MIR typeck 2020-05-03 13:21:40 +01:00
bors
e5f35df2c6 Auto merge of #70825 - eddyb:enum-discr-correct-generics-parent, r=nikomatsakis
typeck: always expose explicit enum discriminant `AnonConst`s' parent in `generics_of`.

This is similar to #70452 but for explicit `enum` discriminant constant expressions.
However, unlike #70452, this PR should have no effect on stable code, as while it alleviates #43408 errors, there is no way to actually compile an `enum` with generic parameters *and* explicit discriminants, without `#![feature(arbitrary_enum_discriminant)]`, as explicit discriminant expression don't count as uses of parameters (if they did, they would count as invariant uses).

<hr/>

There's also 2 other commits here, both related to #70453:
* "ty: use `delay_span_bug` in `ty::AdtDef::eval_explicit_discr`." - hides the ICEs demonstrated on #70453, when there are other errors (which the next commit adds)
* "typeck/wfcheck: require that explicit enum discriminants const-evaluate succesfully." - closes #70453 by picking alternative "2", i.e. erroring when a discriminant doesn't fully const-evaluate from the perspective of the `enum` definition

In the future, it might be possible to allow `enum` discriminants to actually depend on parameters, but that will likely require #68436 + some way to restrict the values so no two variants can end up with overlapping discriminants.

As this PR would close #70453, it shouldn't be merged until a decision is reached there.

r? @nikomatsakis
2020-05-03 12:05:46 +00:00
ThinkChaos
4a79424b74 Mention RefCell::take can panic in docs 2020-05-03 12:52:23 +02:00
bors
d626e4dadc Auto merge of #71828 - Dylan-DPC:rollup-qf5h2w5, r=Dylan-DPC
Rollup of 5 pull requests

Successful merges:

 - #71165 (`slice::fill`: use `T` instead of generic arg)
 - #71314 (Implement RFC 2523, `#[cfg(version(..))]`)
 - #71542 (Implement `confusable_idents` lint.)
 - #71806 (typo)
 - #71813 (Decode qualifs for associated const defaults)

Failed merges:

r? @ghost
2020-05-03 08:53:03 +00:00
Dylan DPC
e48a7b8d06
Rollup merge of #71813 - ecstatic-morse:issue-71734, r=tmandry
Decode qualifs for associated const defaults

Fixes #71734.

We encode qualifs for associated constants, but never expected to decode the qualifs for defaulted associated consts. Fix this, and test that associated const defaults have the correct qualifs cross-crate.

r? @tmandry
2020-05-03 14:18:08 +05:30
Dylan DPC
223194127e
Rollup merge of #71806 - lcnr:patch-3, r=jonas-schievink
typo
2020-05-03 14:18:04 +05:30
Dylan DPC
24e101c418
Rollup merge of #71542 - crlf0710:confusable_idents, r=petrochenkov
Implement `confusable_idents` lint.

This collects all identifier symbols into `ParseSession` and examines them within the non-ascii-idents lint.

The skeleton generation part needs to be added to `unicode-security` crate. Will update this PR when the crate is updated.

r? @petrochenkov

EDIT: also included the `concat_idents` part.
2020-05-03 14:18:02 +05:30
Dylan DPC
ffe0a1c9fd
Rollup merge of #71314 - mibac138:cfg-version, r=petrochenkov
Implement RFC 2523, `#[cfg(version(..))]`

Hi! This is my first contribution to rust, I hope I didn't miss anything. I tried to implement this feature so that `#[cfg(version(1.44.0))]` works but the parser was printing an error that I wasn't sure how to fix so I just opted for implementing `#[cfg(version("1.44.0"))]` (note the quotes).

Tracking issue: #64796
2020-05-03 14:18:00 +05:30
Dylan DPC
8cb8d9cfe2
Rollup merge of #71165 - lcnr:patch-2, r=Amanieu
`slice::fill`: use `T` instead of generic arg

implements https://github.com/rust-lang/rust/issues/70758#issuecomment-613994427

As the discussion in #70758 has shifted, I now use `T` instead of `&T`.
2020-05-03 14:17:53 +05:30
bors
0a675c5e02 Auto merge of #71815 - Mark-Simulacrum:no-llvm-rebuild, r=jonas-schievink
Don't bust caches on x.py check/build switches

Fixes #71152
2020-05-03 02:58:00 +00:00
Esteban Küber
74b7ed78b1 trailing newlines 2020-05-02 18:24:08 -07:00
Esteban Küber
9bb5b549aa Add docs 2020-05-02 18:24:08 -07:00
Esteban Küber
b0085c86fc Suggest constraint on impl Trait in return type
Fix #71035.
2020-05-02 18:24:07 -07:00
Esteban Küber
6648a08b30 fix rebase 2020-05-02 18:24:07 -07:00
Esteban Küber
299bd12fe5 Point at associated types when they have a default type
Associated types with a default type in a trait can't be relied upon to
remain of that default type when in use, so literals of that type can't
be used in the trait's items. Point at the associated type and state
that information.

Reduce verbosity for associated consts of the wrong type.
2020-05-02 18:24:07 -07:00
Esteban Küber
ee96b8b119 review comment: use or patterns 2020-05-02 18:24:07 -07:00
Esteban Küber
31b3566196 When a projection is expected, suggest constraining or calling method 2020-05-02 18:24:07 -07:00
Esteban Küber
3a795fba03 On type mismatch involving associated type, suggest constraint
When an associated type is found when a specific type was expected, if
possible provide a structured suggestion constraining the associated
type in a bound.

```
error[E0271]: type mismatch resolving `<T as Foo>::Y == i32`
  --> $DIR/associated-types-multiple-types-one-trait.rs:13:5
   |
LL |     want_y(t);
   |     ^^^^^^ expected `i32`, found associated type
...
LL | fn want_y<T:Foo<Y=i32>>(t: &T) { }
   |                 ----- required by this bound in `want_y`
   |
   = note:         expected type `i32`
           found associated type `<T as Foo>::Y`
help: consider constraining the associated type `<T as Foo>::Y` to `i32`
   |
LL | fn have_x_want_y<T:Foo<X=u32, Y = i32>>(t: &T)
   |                             ^^^^^^^^^
```

```
error[E0308]: mismatched types
  --> $DIR/trait-with-missing-associated-type-restriction.rs:12:9
   |
LL |     qux(x.func())
   |         ^^^^^^^^ expected `usize`, found associated type
   |
   = note:         expected type `usize`
           found associated type `<impl Trait as Trait>::A`
help: consider constraining the associated type `<impl Trait as Trait>::A` to `usize`
   |
LL | fn foo(x: impl Trait<A = usize>) {
   |                     ^^^^^^^^^^
```
2020-05-02 18:23:46 -07:00
mibac138
8a77d1ca3f Add build script to rustc_attr because of cfg(version) 2020-05-03 02:42:12 +02:00
mibac138
a3ee28370f Add more tests for cfg(version) 2020-05-03 02:42:11 +02:00
mibac138
96f27c73cf Change cfg(version) error message wording 2020-05-03 02:42:10 +02:00
mibac138
90aa62a1bf Implement RFC 2523, #[cfg(version(..))] 2020-05-03 02:42:07 +02:00
bors
c1e0552869 Auto merge of #71807 - Dylan-DPC:rollup-jvb8sd9, r=Dylan-DPC
Rollup of 7 pull requests

Successful merges:

 - #69274 (Implement RFC 2396: `#[target_feature]` 1.1)
 - #71767 (doc: make Stack and StackElement a little pretty)
 - #71772 (Mark query function as must_use.)
 - #71777 (cleanup: `config::CrateType` -> `CrateType`)
 - #71784 (Remove recommendation for unmaintained dirs crate)
 - #71785 (Update comment regarding SO_REUSEADDR on Windows)
 - #71787 (fix rustdoc warnings)

Failed merges:

r? @ghost
2020-05-02 23:35:09 +00:00
Mark Rousskov
7f645aba10 Don't skip building LLVM if already built 2020-05-02 18:43:55 -04:00
Mark Rousskov
131e120585 Extract stamp testing for LLVM
The extracted function can be used by the rest of bootstrap to detect if we've
already built an up-to-date LLVM (and so it's safe for us to either request it
or pretend it exists).
2020-05-02 18:25:45 -04:00
Dylan MacKenzie
14a2c8d042 Decode qualifs from defaulted trait associated consts 2020-05-02 14:46:22 -07:00
Dylan MacKenzie
bcc44b8e02 Test associated const default qualifs cross-crate
This also tests for the ICE in #71734
2020-05-02 14:46:22 -07:00
unexge
ef813ca95a Add stability attribute to E0539 error examples 2020-05-03 00:25:45 +03:00
bors
f05a524044 Auto merge of #69274 - LeSeulArtichaut:target-feature-11, r=hanna-kruppe
Implement RFC 2396: `#[target_feature]` 1.1

Tracking issue: #69098

r? @nikomatsakis
cc @gnzlbg @joshtriplett
2020-05-02 20:24:50 +00:00
unexge
9536567210 Add #![feature(staged_api)] attribute to E0539 error examples 2020-05-02 23:10:34 +03:00
Esteban Küber
16a0349571 Do not try to find binop method on RHS TyErr
Fix #71798.
2020-05-02 12:50:57 -07:00
Charles Lew
f3ec00a5fe Add a fast code path to optimize confusable_idents lint for ASCII code base. 2020-05-03 02:31:13 +08:00
Charles Lew
c05961c2db Implement confusable_idents lint. 2020-05-03 02:30:50 +08:00
Bastian Kauschke
902aa62d51 slice::fill: take T by value. 2020-05-02 20:15:05 +02:00
unexge
e4ee172ab0 Add long error explanation for E0539 2020-05-02 21:14:08 +03:00
Eduard-Mihai Burtescu
926c7a298d typeck: always expose explicit enum discriminant AnonConsts' parent in generics_of. 2020-05-02 19:51:44 +03:00
Eduard-Mihai Burtescu
2c29f0cc8e typeck/wfcheck: require that explicit enum discriminants const-evaluate succesfully. 2020-05-02 19:51:38 +03:00
Dylan DPC
97cf378f54
Rollup merge of #71787 - tshepang:rustdoc-warnings, r=varkor
fix rustdoc warnings
2020-05-02 18:27:52 +02:00
Dylan DPC
5a7b21faba
Rollup merge of #71785 - reitermarkus:cfg-attribute, r=Mark-Simulacrum
Update comment regarding SO_REUSEADDR on Windows
2020-05-02 18:27:48 +02:00
Dylan DPC
94d2fd9205
Rollup merge of #71784 - Xaeroxe:patch-1, r=jonas-schievink
Remove recommendation for unmaintained dirs crate

See #71684 for reasoning here
2020-05-02 18:27:43 +02:00
Dylan DPC
590d201e0b
Rollup merge of #71777 - petrochenkov:crtype, r=Mark-Simulacrum
cleanup: `config::CrateType` -> `CrateType`
2020-05-02 18:27:39 +02:00