Commit graph

24845 commits

Author SHA1 Message Date
Pietro Albini
46344122d1
Rollup merge of #61500 - estebank:expregression, r=petrochenkov
Fix regression 61475

Addresses #61475.
2019-06-04 22:39:39 +02:00
Pietro Albini
d5643be9b4
Rollup merge of #61488 - matthewjasper:fix-nll-typeck-ices, r=pnkfelix
Fix NLL typeck ICEs

* Don't ICE when a type containing a region is constrained by nothing
* Don't ICE trying to normalize a type in a `ParamEnv` containing global bounds.

To explain what was happening in the `issue-61311-normalize.rs` case:

* When borrow checking the `the_fn` in the last `impl` we would try to normalize `Self::Proj` (`<Unit as HasProjFn>::Proj`).
* We would find the `impl` that we're checking and and check its `where` clause.
* This would need us to check `<Box<dyn Obj + 'static> as HasProj>::Proj: Bound`
* We find two possible implementations, the blanket impl and the bound in our `ParamEnv`.
* The bound in our `ParamEnv` was canonicalized, so we don't see it as a global bound. As such we prefer it to the `impl`.
* This means that we cannot normalize `<Box<dyn Obj + 'static> as HasProj>::Proj` to `Unit`.
* The `<Box<dyn Obj + 'static> as HasProj>::Proj: Bound` bound, which looks like it should be in our `ParamEnv` has been normalized to `Unit: Bound`.
* We fail to prove `<Box<dyn Obj + 'static> as HasProj>::Proj: Bound`.
* We ICE, since we believe typeck have errored.

Closes #61311
Closes #61315
Closes #61320

r? @pnkfelix
cc @nikomatsakis
2019-06-04 22:39:38 +02:00
Pietro Albini
98176fc8fb
Rollup merge of #61453 - lzutao:nouse-featuregate-integer_atomics, r=sfackler
Remove unneeded feature attr from atomic integers doctests

Closes #61448

r? @Centril
2019-06-04 22:39:36 +02:00
bors
97c9437585 Auto merge of #61454 - lzutao:ice-rotate_left, r=RalfJung
Fix integer overflow in rotate_left

Closes #61406
r? @RalfJung
2019-06-04 17:20:14 +00:00
Lzu Tao
d392cb5967 Fix integer overflow in rotate_left 2019-06-04 15:26:10 +00:00
Lzu Tao
f60b5f1bc7 Remove unneeded feature attr from atomic integers doctests 2019-06-04 13:24:39 +00:00
bors
acda261de8 Auto merge of #61437 - christianpoveda:const-eval-indirects, r=wesleywiser,oli-obk
Add const-eval support for indirects

r? @wesleywiser
2019-06-04 12:37:44 +00:00
bors
021a503309 Auto merge of #61136 - matthewjasper:cannot-move-errors, r=pnkfelix
Make cannot move errors more consistent with other borrowck errors

* Note the type of the place being moved in all cases.
* Note the place being moved from.
* Simplify the search for overloaded place operators
* Extend the note for move from overloaded deref apply to all types.
* Add a note for moves from overloaded index.
* Special case moves for closure captures.

r? @pnkfelix
2019-06-04 08:31:53 +00:00
Christian Poveda
31ab573052 Add const-eval support for indirects 2019-06-03 23:53:46 -05:00
Mazdak Farrokhzad
5baa58ea5f
Rollup merge of #61499 - varkor:issue-53457, r=oli-obk
Add regression test for existential type ICE #53457

Closes #53457.
2019-06-04 04:48:31 +02:00
Mazdak Farrokhzad
f8a236394c
Rollup merge of #61446 - czipperz:nll-unused_mut, r=matthewjasper
On TerminatorKind::DropAndReplace still handle unused_mut correctly

Closes #61424

- [x] Todo add regression test
2019-06-04 04:48:21 +02:00
Mazdak Farrokhzad
28ce2b1fdb
Rollup merge of #61444 - estebank:const-pt-as-ref, r=matthewjasper
Suggest using `as_ref` on `*const T`

Fix #21596.
2019-06-04 04:48:19 +02:00
Mazdak Farrokhzad
3a06a93f59
Rollup merge of #61413 - davidtwco:async-argument-order-in-a-sane-way, r=eddyb
Re-implement async fn drop order lowering

This PR re-implements the async fn drop order lowering changes so
that it all takes place in HIR lowering, building atop the work done by
@eddyb to refactor `Res::Upvar`.

Previously, this types involved in the lowering were constructed in
libsyntax as they had to be used during name resolution and HIR
lowering. This was awful because none of that logic should have existed
in libsyntax.

This commit also changes `ArgSource` to keep a `HirId` to the original
argument pattern rather than a cloned copy of the pattern.

Only b7aa4ed and 71fb8fa should be reviewed, any other commits
are from #61276 (though 447e336 might end up staying in this PR).

As a nice side effect, it also fixes #61187 (cc #61192).

r? @eddyb
cc @cramertj
2019-06-04 04:48:11 +02:00
Mazdak Farrokhzad
1563514196
Rollup merge of #61409 - varkor:condition-trait-param-ice, r=oli-obk
Fix an ICE with a const argument in a trait

This goes some way towards fixing https://github.com/rust-lang/rust/issues/61383 (the reduced test case is fixed).
2019-06-04 04:48:08 +02:00
Esteban Küber
5716e26232 Add regression test 2019-06-03 18:39:17 -07:00
bors
e22b7a3eef Auto merge of #59148 - lcnr:unchecked_maths, r=eddyb
add support for unchecked math

add compiler support for
```rust
/// Returns the result of an unchecked addition, resulting in
/// undefined behavior when `x + y > T::max_value()` or `x + y < T::min_value()`.
pub fn unchecked_add<T>(x: T, y: T) -> T;

/// Returns the result of an unchecked substraction, resulting in
/// undefined behavior when `x - y > T::max_value()` or `x - y < T::min_value()`.
pub fn unchecked_sub<T>(x: T, y: T) -> T;

/// Returns the result of an unchecked multiplication, resulting in
/// undefined behavior when `x * y > T::max_value()` or `x * y < T::min_value()`.
pub fn unchecked_mul<T>(x: T, y: T) -> T;
```

cc https://github.com/rust-lang/rfcs/issues/2508
2019-06-03 22:05:55 +00:00
lcnr/Bastian Kauschke
d7e0834c5f add ui tests for unchecked math 2019-06-03 21:30:25 +02:00
bors
6ffb8f53ee Auto merge of #61100 - varkor:must_use-tuple-expr, r=cramertj
Apply #[must_use] lint to components of tuples

Fixes https://github.com/rust-lang/rust/issues/61061.
2019-06-03 19:12:17 +00:00
varkor
1c6dce8b6d Add ui/impl-trait/issues folder 2019-06-03 19:57:13 +01:00
varkor
41dd21a9bc Add a regression test for #53457 2019-06-03 19:54:28 +01:00
varkor
de2bf3a761 Add nested must_use variant 2019-06-03 18:50:32 +01:00
varkor
81fa794af9 Specify tuple element in lint message 2019-06-03 18:19:29 +01:00
varkor
058551c4fd Add function call to test 2019-06-03 18:19:29 +01:00
varkor
e121d9671a Use precise span for must_use tuple components 2019-06-03 18:19:29 +01:00
varkor
fd36b5fd52 Add test for #[must_use] in tuples 2019-06-03 18:19:29 +01:00
Matthew Jasper
794239d9a4 Don't canonicalize 'static in normalize 2019-06-03 15:04:40 +01:00
Matthew Jasper
8ffa408059 Update tests for changes to cannot move errors 2019-06-03 14:55:29 +01:00
David Wood
5e3b41e0cb
rustc: remove HirId from ArgSource::AsyncFn
This commit removes the `HirId` from `ArgSource::AsyncFn`, relying on
the fact that only `simple_ident` is used in each of the locations that
previously took the original pattern from the `ArgSource::AsyncFn`.
2019-06-03 14:02:21 +01:00
Matthew Jasper
2751b867a7 Don't try to lower ReEmpty in NLL 2019-06-03 13:46:38 +01:00
lcnr/Bastian Kauschke
8a25fdb409 add codegen test for unchecked math 2019-06-03 13:00:44 +02:00
David Wood
1e5f496143
rustc: async fn drop order lowering in HIR
This commit re-implements the async fn drop order lowering changes so
that it all takes place in HIR lowering, building atop the work done by
`@eddyb` to refactor `Res::Upvar`.

Previously, this types involved in the lowering were constructed in
libsyntax as they had to be used during name resolution and HIR
lowering. This was awful because none of that logic should have existed
in libsyntax.

This commit also changes `ArgSource` to keep a `HirId` to the original
argument pattern rather than a cloned copy of the pattern.
2019-06-03 10:20:35 +01:00
varkor
2b27c6235b Allow true and false in const generic arguments 2019-06-03 09:59:45 +01:00
bors
c57ed9d947 Auto merge of #61331 - estebank:fn-arg-parse-recovery, r=varkor
Recover gracefully from argument with missing type or param name
2019-06-03 05:40:53 +00:00
bors
d59dcb261e Auto merge of #61361 - estebank:infer-type, r=varkor
Add more detail to type inference error

When encountering code where type inference fails, add more actionable
information:

```
fn main() {
    let foo = Vec::new();
}
```

```
error[E0282]: type annotations needed in `std::vec::Vec<T>`
  --> $DIR/vector-no-ann.rs:2:16
   |
LL |     let foo = Vec::new();
   |         ---   ^^^^^^^^ cannot infer type for `T` in `std::vec::Vec<T>`
   |         |
   |         consider giving `foo` a type
```

Fix #25633.
2019-06-03 02:45:35 +00:00
Chris Gregory
fea2cdb0a4 Use a type implementing Drop 2019-06-02 19:11:39 -07:00
bors
d461555e44 Auto merge of #61460 - Centril:rollup-8txhjx4, r=Centril
Rollup of 6 pull requests

Successful merges:

 - #61380 (Fix some issues with `unwrap_usize` instead of `assert_usize`)
 - #61423 (codegen: change `$6d$` to `$u6d$`)
 - #61438 (Point at individual type args on arg count mismatch)
 - #61441 (Tweak wording when encountering `fn` call in pattern)
 - #61451 (Fix missing semicolon in doc)
 - #61458 (Fix typo in AsRef doc)

Failed merges:

r? @ghost
2019-06-02 14:42:11 +00:00
Mazdak Farrokhzad
247e0a688d
Rollup merge of #61441 - estebank:fn-call-in-match, r=varkor
Tweak wording when encountering `fn` call in pattern

Fix #60642
2019-06-02 15:23:50 +02:00
Mazdak Farrokhzad
83b74f2aad
Rollup merge of #61438 - estebank:generics-span, r=varkor
Point at individual type args on arg count mismatch

- Point at individual type arguments on arg count mismatch
- Make generics always have a valid span, even when there are no args
- Explain that `impl Trait` introduces an implicit type argument

Fix #55991.
2019-06-02 15:23:49 +02:00
Mazdak Farrokhzad
5599985caa
Rollup merge of #61423 - davidtwco:correct-symbol-mangling, r=eddyb
codegen: change `$6d$` to `$u6d$`

This changes a mistake introduced in #61195 where the mangling
workaround used was incorrect, resolving [this comment](https://github.com/rust-lang/rust/pull/61195#discussion_r289597707) from @eddyb.

r? @eddyb
2019-06-02 15:23:47 +02:00
Mazdak Farrokhzad
c748c7b3fe
Rollup merge of #61380 - varkor:expected-usize-got-param, r=eddyb
Fix some issues with `unwrap_usize` instead of `assert_usize`

Fixes https://github.com/rust-lang/rust/issues/61337.
Fixes https://github.com/rust-lang/rust/issues/61341.
Fixes https://github.com/rust-lang/rust/issues/61422.

r? @eddyb
2019-06-02 15:23:46 +02:00
Esteban Küber
eb73b73b8d Suggest using as_ref on *const T 2019-06-01 19:49:20 -07:00
varkor
e82cd9528c Add regression test for #61422 2019-06-02 01:55:46 +01:00
varkor
5a2410a07c Add error for pattern-matching on arrays without a fixed size 2019-06-02 01:55:46 +01:00
varkor
c2b663c666 Fix unwrapping usize issue with transparent MaybeUnit array wrapper 2019-06-02 01:50:06 +01:00
Chris Gregory
7feeaf0d27 Add test 2019-06-01 19:14:09 -05:00
Esteban Küber
3d0eae18c6 Tweak wording when encountering fn call in pattern 2019-06-01 16:27:35 -07:00
Esteban Küber
e420f4410b Account for cases where we can find the type arg name, but the local name is _ 2019-06-01 15:33:31 -07:00
Esteban Küber
9616b333b2 review comment: tweak wording 2019-06-01 14:47:15 -07:00
Esteban Küber
0754c84611 Explain that impl Trait introduces an implicit type argument 2019-06-01 11:35:54 -07:00
Eduard-Mihai Burtescu
f7a4c9d7b5 rustc: collect upvars from HIR, instead of during name resolution. 2019-06-01 20:44:05 +03:00