Commit graph

29648 commits

Author SHA1 Message Date
Esteban Küber
f47c4ffdfa Do not ICE in the face of invalid enum discriminant 2020-04-15 10:22:51 -07:00
Mazdak Farrokhzad
629e51b761
Rollup merge of #70891 - lcnr:replace-rvalue_aggregate, r=eddyb
unit rvalue, use constant `()` instead of tuple

fixes #70886

r? @eddyb
2020-04-15 09:10:00 +02:00
bors
76cbf0053f Auto merge of #71151 - Dylan-DPC:rollup-6rt4h7b, r=Dylan-DPC
Rollup of 8 pull requests

Successful merges:

 - #70657 (Allow `try`-blocks in places where an open delim is expected)
 - #70947 (tighten CTFE safety net for accesses to globals)
 - #70949 (simplify `vec!` macro)
 - #71002 (fix target & runtool args order)
 - #71082 (ptr: introduce len() method on raw slices)
 - #71128 (Remove unused single_step flag)
 - #71133 (Tighten time complexity on the doc of sort_by_key)
 - #71135 (Update books)

Failed merges:

r? @ghost
2020-04-15 00:39:22 +00:00
Eduard-Mihai Burtescu
8bb7b7bf9c typeck: always expose repeat count AnonConsts' parent in generics_of. 2020-04-14 20:13:20 +03:00
Eduard-Mihai Burtescu
8989029476 borrow_check/type_check: normalize Aggregate and Call operands. 2020-04-14 20:03:18 +03:00
Bastian Kauschke
81a3cd7278 allow try as scrutinee, e.g. match try ... 2020-04-14 18:39:20 +02:00
Eduard-Mihai Burtescu
38d38349f3 typeck: workaround WF hole in to_const. 2020-04-14 19:31:31 +03:00
Eduard-Mihai Burtescu
2bbc33aaf0 typeck: track any errors injected during writeback and taint tables appropriately. 2020-04-14 19:06:52 +03:00
Bastian Kauschke
647f810d7b update 32 bit mir-opt tests 2020-04-14 09:14:58 +02:00
bors
a3ef360368 Auto merge of #70679 - tmandry:issue-68112, r=nikomatsakis
Improve async-await/generator obligation errors in some cases

Fixes #68112.

This change is best read one commit at a time (I add a test at the beginning and update it in each change after).

The `test2` function is a case I found while writing the test that we don't handle with this code yet. I don't attempt to fix it in this PR, but it's a good candidate for future work.

r? @davidtwco, @nikomatsakis
2020-04-14 06:47:38 +00:00
bors
513a6473d6 Auto merge of #70643 - Rustin-Liu:rustin-patch-rename, r=eddyb
Rename AssocKind::Method to AssocKind::Fn

Part of https://github.com/rust-lang/rust/issues/60163.

https://github.com/rust-lang/rust/issues/60163#issuecomment-607284413
2020-04-14 03:11:12 +00:00
Tyler Mandry
4326d959f4 Update test after rebase 2020-04-13 19:14:26 -07:00
Tyler Mandry
df64c5d260 Incorporate feedback into diagnostics 2020-04-13 18:58:17 -07:00
Tyler Mandry
e340375ef8 Don't double-annotate the same Span 2020-04-13 18:58:17 -07:00
Tyler Mandry
aed7c30e4f Use clearer message when obligation is caused by await expr 2020-04-13 18:58:11 -07:00
Tyler Mandry
6edfd66c5d Use "generator" instead of "future" when appropriate 2020-04-13 18:48:55 -07:00
Tyler Mandry
7127ff3d94 Don't annotate type when type is opaque 2020-04-13 18:48:55 -07:00
Tyler Mandry
db0a5a1056 Improve span label 2020-04-13 18:48:55 -07:00
Tyler Mandry
a40ec13262 Add test for #68112 (existing output) 2020-04-13 18:48:55 -07:00
Dylan DPC
dd27462ea9
Rollup merge of #71109 - lcnr:generics_in_const_fn, r=eddyb
allow const generics in const fn

This was explicitly forbidden before. As we were unable to think of a reason
why this should still be the case, this check has been removed.

r? @eddyb
cc @varkor @Centril
2020-04-14 01:24:18 +02:00
Dylan DPC
e261ef0622
Rollup merge of #71103 - samrat:tait-sized, r=estebank
Add test case for type aliasing `impl Sized`

Fixes #71085
2020-04-14 01:24:16 +02:00
Rustin-Liu
b07e7fe047 Rename AssocKind::Method to AssocKind::Fn
Rename fn_has_self_argument to fn_has_self_parameter

Rename AssocItemKind::Method to AssocItemKind::Fn

Refine has_no_input_arg

Refine has_no_input_arg

Revert has_no_input_arg

Refine suggestion_descr

Move as_def_kind into AssocKind

Signed-off-by: Rustin-Liu <rustin.liu@gmail.com>

Fix tidy check issue

Signed-off-by: Rustin-Liu <rustin.liu@gmail.com>
2020-04-14 07:12:07 +08:00
Bastian Kauschke
4714e202ae bless mir opt tests 2020-04-13 22:39:10 +02:00
Bastian Kauschke
50eb39757e allow const generics in const fn 2020-04-13 22:37:20 +02:00
bors
8e18e26f12 Auto merge of #71105 - Dylan-DPC:rollup-nezezxr, r=Dylan-DPC
Rollup of 5 pull requests

Successful merges:

 - #70656 (Improve scrollbar display in rustdoc)
 - #71051 (Suggest .into() over try_into() when it would work)
 - #71087 (Remove `FnCtxt::impl_self_ty`)
 - #71097 (Pattern docs)
 - #71101 (Miri: let machine hook dynamically decide about alignment checks)

Failed merges:

r? @ghost
2020-04-13 19:47:23 +00:00
Dylan DPC
fd1b057004
Rollup merge of #71087 - JohnTitor:impl-self-ty, r=eddyb
Remove `FnCtxt::impl_self_ty`

Fixes #69489
r? @eddyb cc @Centril
2020-04-13 20:23:30 +02:00
Dylan DPC
f551d8a410
Rollup merge of #71051 - ryr3:fix_try_into, r=estebank
Suggest .into() over try_into() when it would work

It would be better to suggest x.into() instead, which is shorter, cannot fail, and doesn't require importing a trait.
Tests have been added and made up to date.
Fixes #70851
2020-04-13 20:23:29 +02:00
Samrat Man Singh
38bfba659e Add test case for type aliasing impl Sized 2020-04-13 22:14:08 +05:30
bors
c58c532744 Auto merge of #70989 - eddyb:mir-opt-32-pr-ci, r=Mark-Simulacrum
ci: run mir-opt tests on PR CI also as 32-bit (for `EMIT_MIR_FOR_EACH_BIT_WIDTH`).

Background: #69916 and [`src/test/mir-opt/README.md`](https://github.com/rust-lang/rust/blob/master/src/test/mir-opt/README.md):
> By default 32 bit and 64 bit targets use the same dump files, which can be problematic in the
presence of pointers in constants or other bit width dependent things. In that case you can add
>
> ```
> // EMIT_MIR_FOR_EACH_BIT_WIDTH
> ```
>
> to your test, causing separate files to be generated for 32bit and 64bit systems.

However, if you change the output of such a test (intentionally or not), or if you add a test and it varies between 32-bit and 64-bit platforms, you have to run this command (for a x64 linux host):
`./x.py test --stage 1 --target x86_64-unknown-linux-gnu --target i686-unknown-linux-gnu --bless  src/test/mir-opt`

Otherwise, bors trying to merge the PR will fail, since we test 32-bit targets there.
But we don't on PR CI, which means there's no way the PR author would know (unless they were burnt by this already and know what to look for).

This PR resolves that by running `mir-opt` tests for ~~`i686-unknown-linux-gnu`~~, on PR CI.
**EDIT**: switched to `armv5te-unknown-linux-gnueabi` to work around LLVM 7 crashes (see https://github.com/rust-lang/compiler-builtins/pull/311#issuecomment-612270089), found during testing.

cc @rust-lang/wg-mir-opt @rust-lang/infra
2020-04-13 16:28:57 +00:00
Yuki Okushi
ef07cf4518
Remove FnCtxt::impl_self_ty 2020-04-13 11:36:37 +09:00
bors
cc072281f9 Auto merge of #71023 - mati865:mingw-unwind-linking-cleanup, r=Amanieu
[windows] Add testscase for self-contained executables and fix pthread linking

Fixes https://github.com/rust-lang/rust/issues/71061
2020-04-13 00:59:36 +00:00
Dylan DPC
ebb1a8b6ff
Rollup merge of #71064 - dwrensha:issue-69130, r=eddyb
fix issue 69130

Closes #69130.
2020-04-12 23:47:39 +02:00
Dylan DPC
6947dec3a6
Rollup merge of #67766 - sapir:fix-unused-in-or-pattern-warning, r=matthewjasper
Fix warning for unused variables in or pattern (issue #67691)

Is this a good way to fix it?

Also, the tests fail, the "fixed" code output says `{ i, j }` instead of `{ i, j: _ }`, how can I fix that?
2020-04-12 23:47:36 +02:00
David Renshaw
57ed3d378d fix issue 69130 2020-04-12 11:36:37 -04:00
Yashhwanth Ram
5ffc1abc92 Add blessed tests after compiler message fix 2020-04-12 12:15:07 +05:30
Yashhwanth Ram
55464ebc83 Fix order of comparison and remove incorrect case for ints in typeck/demand.rs
Add tests for *size
2020-04-12 12:14:42 +05:30
bors
32fb4dcdd7 Auto merge of #69707 - estebank:impl-trait-missing-bounds, r=Centril
Handle `impl Trait` where `Trait` has an assoc type with missing bounds

When encountering a type parameter that needs more bounds the trivial case is `T` `where T: Bound`, but it can also be an `impl Trait` param that needs to be decomposed to a type param for cleaner code. For example, given

```rust
fn foo(constraints: impl Iterator) {
    for constraint in constraints {
        println!("{:?}", constraint);
    }
}
```

the previous output was

```
error[E0277]: `<impl Iterator as std::iter::Iterator>::Item` doesn't implement `std::fmt::Debug`
 --> src/main.rs:3:26
  |
1 | fn foo(constraints: impl Iterator) {
  |                                    - help: consider further restricting the associated type: `where <impl Iterator as std::iter::Iterator>::Item: std::fmt::Debug`
2 |     for constraint in constraints {
3 |         println!("{:?}", constraint);
  |                          ^^^^^^^^^^ `<impl Iterator as std::iter::Iterator>::Item` cannot be formatted using `{:?}` because it doesn't implement `std::fmt::Debug`
  |
  = help: the trait `std::fmt::Debug` is not implemented for `<impl Iterator as std::iter::Iterator>::Item`
  = note: required by `std::fmt::Debug::fmt`
```

which is incorrect as `where <impl Iterator as std::iter::Iterator>::Item: std::fmt::Debug` is not valid syntax nor would it restrict the positional `impl Iterator` parameter if it were.

The output being introduced is

```
error[E0277]: `<impl Iterator as std::iter::Iterator>::Item` doesn't implement `std::fmt::Debug`
 --> src/main.rs:3:26
  |
3 |         println!("{:?}", constraint);
  |                          ^^^^^^^^^^ `<impl Iterator as std::iter::Iterator>::Item` cannot be formatted using `{:?}` because it doesn't implement `std::fmt::Debug`
  |
  = help: the trait `std::fmt::Debug` is not implemented for `<impl Iterator as std::iter::Iterator>::Item`
  = note: required by `std::fmt::Debug::fmt`
help: introduce a type parameter with a trait bound instead of using `impl Trait`
   |
LL | fn foo<T: Iterator>(constraints: T) where <T as std::iter::Iterator>::Item: std::fmt::Debug  {
   |       ^^^^^^^^^^^^^              ^  ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
```

This suggestion is correct and lead the user in the right direction: because you have an associated type restriction you can no longer use `impl Trait`, the only reasonable alternative is to introduce a named type parameter, bound by `Trait` and with a `where` binding on the associated type for the new type parameter `as Trait` for the missing bound.

*Ideally*, we would want to suggest something like the following, but that is not valid syntax today

```
error[E0277]: `<impl Iterator as std::iter::Iterator>::Item` doesn't implement `std::fmt::Debug`
 --> src/main.rs:3:26
  |
3 |         println!("{:?}", constraint);
  |                          ^^^^^^^^^^ `<impl Iterator as std::iter::Iterator>::Item` cannot be formatted using `{:?}` because it doesn't implement `std::fmt::Debug`
  |
  = help: the trait `std::fmt::Debug` is not implemented for `<impl Iterator as std::iter::Iterator>::Item`
  = note: required by `std::fmt::Debug::fmt`
help: introduce a type parameter with a trait bound instead of using `impl Trait`
   |
LL | fn foo(constraints: impl Iterator<Item: std::fmt::Debug>) {
   |                     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
```

Fix #69638.
2020-04-12 06:32:45 +00:00
bors
941d4352d7 Auto merge of #69926 - RoccoDev:master, r=estebank,varkor
rustc: Add a warning count upon completion

This adds a `build completed with one warning/x warnings` message, similar to the already present `aborted due to previous error` message.
2020-04-12 00:31:11 +00:00
Esteban Küber
984aac6eed fix rebase 2020-04-11 14:59:15 -07:00
Esteban Küber
1e3bdc08c9 Try to use the first char in the trait name as type param 2020-04-11 14:34:01 -07:00
Esteban Küber
01169572a2 Account for existing names when suggesting adding a type param 2020-04-11 14:34:01 -07:00
Esteban Küber
c85fde126e Account for type params with bounds 2020-04-11 14:34:01 -07:00
Esteban Küber
9d83cc8331 Handle impl Trait where Trait has an assoc type with missing bounds
Fix #69638.
2020-04-11 14:34:01 -07:00
bors
378901d988 Auto merge of #71031 - Dylan-DPC:rollup-zr8hh86, r=Dylan-DPC
Rollup of 5 pull requests

Successful merges:

 - #70644 (Clean up `ModuleConfig` initialization)
 - #70937 (Fix staticlib name for *-pc-windows-gnu targets)
 - #70996 (Add or_insert_with_key to Entry of HashMap/BTreeMap)
 - #71020 (Store UNICODE_VERSION as a tuple)
 - #71021 (Use write!-style syntax for MIR assert terminator)

Failed merges:

r? @ghost
2020-04-11 21:19:28 +00:00
Mateusz Mikuła
7e68cf8927 [windows] Add testcase to make sure executables are self-contained 2020-04-11 21:16:27 +02:00
Dylan DPC
d8dcdec2b8
Rollup merge of #71021 - robojumper:71000-mir-assert-syntax, r=jonas-schievink
Use write!-style syntax for MIR assert terminator

Fixes #71000.

r? @jonas-schievink
2020-04-11 17:52:14 +02:00
Dylan DPC
b794cb262f
Rollup merge of #71020 - pyfisch:unicode-version, r=sfackler
Store UNICODE_VERSION as a tuple

Remove the UnicodeVersion struct containing
major, minor and update fields and replace it with
a 3-tuple containing the version number.
As the value of each field is limited to 255
use u8 to store them.
2020-04-11 17:52:13 +02:00
Dylan DPC
5ecc18f3ec
Rollup merge of #70937 - mati865:mingw-staticlib-suffix, r=petrochenkov
Fix staticlib name for *-pc-windows-gnu targets

Fix https://github.com/rust-lang/rust/issues/69904

Guess this will need FCP but opened PR anyway to bring the attention.

In short Rust has been using wrong `foo.lib` format for static libraries when building for `*-pc-windows-gnu` since version [1.8.0](34b4e66736).
[LD](f4a220077b/ld/emultempl/pe.em (L2224-L2227)) and [LLD](0605f5fbe7/lld/MinGW/Driver.cpp (L140-L141)) agree in that regard and only accept static libraries with `libfoo.a` format. So the only thing to break here is when somebody added a hack to rename created library to proper format (like [here](ad86ab8580 (d5b4de16d947214ec306bd57bed1bd23a939b5f9_197_194))).
2020-04-11 17:52:10 +02:00
bors
e82734e56b Auto merge of #70161 - cjgillot:query-arena, r=nikomatsakis
Allocate some query results on an arena

This avoids a cloning few `Lrc` and `Vec`s in the queries.
2020-04-11 15:31:54 +00:00
RoccoDev
b85c64c3ea
rustc: Add a warning count upon completion 2020-04-11 16:15:24 +02:00