Commit graph

30568 commits

Author SHA1 Message Date
Wesley Wiser
0e0a71a393 Add test case 2020-04-15 14:34:23 -04:00
Esteban Küber
f47c4ffdfa Do not ICE in the face of invalid enum discriminant 2020-04-15 10:22:51 -07:00
Amanieu d'Antras
ce83b49d16 Deprecate the asm! macro 2020-04-15 18:09:00 +01:00
Ralf Jung
9ee4d1aadc reword Miri validity errors: undefined -> uninitialized 2020-04-15 13:38:07 +02:00
Wesley Wiser
8da26e0366 Use call instead of invoke for functions that cannot unwind
The `FnAbi` now knows if the function is allowed to unwind. If a
function isn't allowed to unwind, we can use a `call` instead of an
`invoke`.

This resolves an issue when calling LLVM intrinsics which cannot unwind
LLVM will generate an error if you attempt to invoke them so we need to
ignore cleanup blocks in codegen and generate a call instead.
2020-04-15 05:45:21 -04:00
Duddino
fbc4168d80 Provide better compiler output when using ? on Option in fn returning Result and vice-versa 2020-04-15 10:58:12 +02: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
jumbatm
ed73023a50 Update stderrs after rebase. 2020-04-15 09:35:46 +10:00
jumbatm
3e6609e7bf Amend exceeding-bitshifts test case for #69021.
- Change to warnings so that all lints are emitted
- Expect build-pass
- Change placeholder FIXME to WARN.
2020-04-15 08:58:45 +10:00
Josh Stone
8506bb0060 Update the minimum external LLVM to 8
LLVM 8 was released on March 20, 2019, over a year ago.
2020-04-14 12:44:41 -07:00
Duddino
ce994b633d Provide better compiler output when using ? on Option in fn returning Result and vice-versa 2020-04-14 20:50:26 +02: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
Felix S. Klock II
12207f6c66 Tests.
Namely, a regression test for issue #69798 (export added), and the inverse of
that test (export removd).
2020-04-14 10:52:19 -04: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
PankajChaudhary5
908436f3bb Add proper explanation of error code E0657 2020-04-13 13:36:22 +05:30
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
bishtpawan
26fdde994d Add long error explanation for E0708 #61137
Refactor code as per the suggestions

Refacotor code

provide edition support
2020-04-12 17:22:59 +05:30
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