110196 Commits

Author SHA1 Message Date
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
Arlo Siemsen
f41aa161c2 Normalize source when loading external foreign source into SourceMap
The compiler normalizes source when reading files initially (removes BOMs, etc), but not when loading external sources.

Fixes #70874 by normalizing when loading external sources too. Adds a test to verify normalization.
2020-04-11 23:26:46 -07: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
Dylan MacKenzie
04c91a0bba Add #[inline(always)] to into_query_param 2020-04-11 16:29:50 -07:00
Dylan MacKenzie
f0c77337e1 Apply suggestions from review 2020-04-11 15:18:51 -07:00
Dylan MacKenzie
beeacdb2a7 Use custom trait instead of Into 2020-04-11 15:18:51 -07:00
Dylan MacKenzie
fd8cf3c5e3 Simplify macro 2020-04-11 15:18:51 -07:00
Dylan MacKenzie
6e5a21069d Remove call to to_def_id before calling query helper 2020-04-11 15:18:51 -07:00
Dylan MacKenzie
0d4639d77c Fix inference fallout 2020-04-11 15:18:51 -07:00
Dylan MacKenzie
10ed501254 Impl From<LocalDefId> for DefId 2020-04-11 15:18:51 -07:00
Dylan MacKenzie
62b5aff1ae Make query helpers on TyCtxt take impl Into<DefId> 2020-04-11 15:18:51 -07:00
Esteban Küber
984aac6eed fix rebase 2020-04-11 14:59:15 -07:00
Luca Barbieri
1864caaaa4 Make panic-unwind a default feature for libstd
x.py sets it unconditionally, so want it for plain "cargo build".

We need to load one of the panic runtimes that is in src (vs. pre-built in the
compiler's sysroot) to ensure that we don't load libpanic_unwind from the
sysroot. That would lead to a load of libcore, also from the sysroot, and create
lots of errors about duplicate lang items.
2020-04-11 17:49:16 -04:00
Luca Barbieri
3dd500de37 Don't emit rerun-if-changed on llvm-config if using system LLVM
The code was broken because it printed "llvm-config" instead of the
absolute path to the llvm-config executable, causing Cargo to always
rebuild librustc_llvm if using system LLVM.

Also, it's not the build system's job to rebuild when a system library
changes, so we simply don't emit "rerun-if-changed" if a path to LLVM
was not explicitly provided.
2020-04-11 17:49:16 -04:00
Luca Barbieri
53d58dbf5f Require compiler-rt root at ../src/llvm-project/compiler-rt 2020-04-11 17:49:16 -04:00
Luca Barbieri
ac2b84f962 Depend on getopts from crates.io
rustc_session exports it for other crates to avoid mismatching
crate versions.
2020-04-11 17:49:16 -04:00
Esteban Küber
ca25e2868d review comments 2020-04-11 14:34:01 -07:00
Esteban Küber
44394707e5 review comments 2020-04-11 14:34:01 -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
794b644f0b review comments 2020-04-11 14:34:01 -07:00
Esteban Küber
2c998aa8bb review comments 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
Yuki Okushi
6b2830427b
Update links of rustc guide 2020-04-12 05:02:35 +09:00
Mateusz Mikuła
7e68cf8927 [windows] Add testcase to make sure executables are self-contained 2020-04-11 21:16:27 +02:00
Guillaume Gomez
e2e41c9527 Clean up E0515 explanation 2020-04-11 18:58:03 +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
03a724bd48
Rollup merge of #70996 - ChaiTRex:master, r=Amanieu
Add or_insert_with_key to Entry of HashMap/BTreeMap

Going along with `or_insert_with`, `or_insert_with_key` provides the `Entry`'s key to the lambda, avoiding the need to either clone the key or the need to reimplement this body of this method from scratch each time.

This is useful when the initial value for a map entry is derived from the key. For example, the introductory Rust book has an example Cacher struct that takes an expensive-to-compute lambda and then can, given an argument to the lambda, produce either the cached result or execute the lambda.

---

I'm fairly new to Rust, so any optimizations, corrections to types, better names, better documentation, or whatever else would be appreciated. I'd like to thank Arnavion on freenode for helping me to implement a very similar method when I found that `or_insert_with_key` was unavailable.

As a somewhat-related note, this implements https://github.com/rust-lang/rfcs/issues/1202 from 2015, so if this pull request is accepted, that should be closed.
2020-04-11 17:52:11 +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
Dylan DPC
f9c0ea2862
Rollup merge of #70644 - nnethercote:clean-up-ModuleConfig-init, r=Mark-Simulacrum
Clean up `ModuleConfig` initialization

Because it's currently a mess.

r? @Mark-Simulacrum
2020-04-11 17:52:08 +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
Luca Barbieri
45ede927fb Depend on libc from crates.io 2020-04-11 11:07:04 -04:00
XAMPPRocky
dda3445fd5
Update RELEASES.md 2020-04-11 16:36:29 +02:00
XAMPPRocky
32047903c7
Update RELEASES.md 2020-04-11 16:35:19 +02:00
Guillaume Gomez
d6b75e0ef1 End cleanup on rustdoc-js tools 2020-04-11 16:32:28 +02:00
RoccoDev
b85c64c3ea
rustc: Add a warning count upon completion 2020-04-11 16:15:24 +02:00
Chai T. Rex
db0c39fba5 Change issue number to point to tracking issue 2020-04-11 08:46:12 -04:00
bors
76882666eb Auto merge of #71014 - Centril:rollup-3lc8cnt, r=Centril
Rollup of 5 pull requests

Successful merges:

 - #69573 (tests encoding current behavior for various cases of "binding" to _.)
 - #70881 (bootstrap: work around "unused attribute" errors in incremental stdlib rebuilds.)
 - #70957 (Normalize MIR locals' types for generator layout computation.)
 - #70962 (added machine hooks to track deallocations)
 - #70982 (Normalize function signature in function casting check procedure)

Failed merges:

r? @ghost
2020-04-11 12:22:00 +00:00
robojumper
b78ff993fd Use write!-style syntax for MIR assert terminator 2020-04-11 13:27:51 +02:00
Pyfisch
7f4048c710 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 12:56:25 +02:00
Eduard-Mihai Burtescu
cb6a5609b3 ci: run mir-opt tests on PR CI also as 32-bit (for EMIT_MIR_FOR_EACH_BIT_WIDTH). 2020-04-11 13:43:22 +03:00
Eduard-Mihai Burtescu
f4a96c176f tests: add missing // no-system-llvm annotation to #69841 test. 2020-04-11 13:39:37 +03:00
Eduard-Mihai Burtescu
e0084922aa tests: don't use only-64bit in mir-opt tests. 2020-04-11 13:39:23 +03:00
Eduard-Mihai Burtescu
15719cde5e compiletest: support --pass=check and --pass=build for mir-opt tests. 2020-04-11 13:39:23 +03:00
bors
1f3b65921e Auto merge of #69573 - pnkfelix:issue-53114-add-tests, r=Centril
tests encoding current behavior for various cases of "binding" to _.

The `_` binding form is special, in that it encodes a "no-op": nothing is actually bound, and thus nothing is moved or borrowed in this scenario. Usually we do the "right" thing in all such cases. The exceptions are explicitly pointed out in this test case, so that we keep track of whether they are eventually fixed.

Cc #53114.

(This does not close the aforementioned issue; it just adds the tests encoding the current behavior, which we hope to eventually fix.)
2020-04-11 06:44:47 +00:00
Mazdak Farrokhzad
0a6d1778ff
Rollup merge of #70982 - ldm0:fncoerce, r=eddyb
Normalize function signature in function casting check procedure

Fixes #54094
```rust
trait Zoo {
    type X;
}

impl Zoo for u16 {
    type X = usize;
}

fn foo(abc: <u16 as Zoo>::X) {}

fn main() {
    let x: *const u8 = foo as _;
}
```

Currently a `FnDef` need to be checked if it's able to cast to `FnPtr` before it is actually casted. But the signature of `FnPtr` target's associated types are not normalized:

96d77f0e5f/src/librustc_typeck/check/cast.rs (L536-L553)
However, during the coercion check, the signature of `FnPtr` target's associated types are normalized (The `<u16 as Zoo>::X` turns into `usize`).

96d77f0e5f/src/librustc_typeck/check/coercion.rs (L687-L729)

This inconsistency leads to the error:`Err(Sorts(ExpectedFound { expected: <u16 as Zoo>::X, found: usize }))`.
2020-04-11 01:52:29 +02:00