15556 Commits

Author SHA1 Message Date
John Kåre Alsaker
69d18a3986 Make more passes incremental 2019-01-11 03:53:29 +01:00
bors
664c7797f6 Auto merge of #56614 - Zoxc:query-perf2, r=michaelwoerister
Replace LockCell with atomic types

Split from https://github.com/rust-lang/rust/pull/56509

r? @michaelwoerister
2019-01-09 11:08:14 +00:00
bors
b8c8f0bdf6 Auto merge of #57114 - Zoxc:query-perf11, r=michaelwoerister
Clean up and optimize OpenTask / read_index

r? @michaelwoerister
2019-01-08 14:11:19 +00:00
bors
2f19f8cec9 Auto merge of #56988 - alexcrichton:monotonic-instant, r=sfackler
std: Force `Instant::now()` to be monotonic

This commit is an attempt to force `Instant::now` to be monotonic
through any means possible. We tried relying on OS/hardware/clock
implementations, but those seem buggy enough that we can't rely on them
in practice. This commit implements the same hammer Firefox recently
implemented (noted in #56612) which is to just keep whatever the lastest
`Instant::now()` return value was in memory, returning that instead of
the OS looks like it's moving backwards.

Closes #48514
Closes #49281
cc #51648
cc #56560
Closes #56612
Closes #56940
2019-01-08 11:30:19 +00:00
bors
9d54812829 Auto merge of #57095 - Zoxc:prof-fix, r=michaelwoerister
Fix and optimize query profiling

r? @michaelwoerister

cc @wesleywiser
2019-01-08 02:00:12 +00:00
bors
8e2063d020 Auto merge of #57303 - matthiaskrgr:clippy_submodule_upd, r=oli-obk
submodules: update clippy and rls

Fixes clippy toolstate

Changes:
````
Update to latest compiletest-rs release
add testcase for #3462
deps: bump rustc_tools_util version from 0.1.0 to 0.1.1 just in case...
rustc_tool_utils: fix failure to create proper non-repo version string when used in crates on crates.io, bump version
UI test cleanup: Extract ifs_same_cond tests
UI test cleanup: Extract for_kv_map lint tests
Fix test for rust-lang/rust#57250
Limit infinite_iter collect() check to known types
Some improvements to util documentation
Use hashset for name blacklist
Reformat random_state tests
Use node_id_to_type_opt instead of node_it_to_type in random_state
Check pattern equality while checking declaration equality
random_state lint
Use an FxHashSet for valid idents in documentation lint
Fix suggestion for unnecessary_ref lint
Update CONTRIBUTING.md for rustfix tests
Update .fixed files via update-references.sh
Run rustfix on first UI test
Use WIP branch for compiletest_rs
````

Also updates RLS and removes the patching of rustc_tool_utils from cargo.toml

RLS changes:
````
update clippy hash and rustc_tools_util and use rustc_tools_util from crates.io
Work around https://github.com/rust-lang/rust/pull/55937
Update Clippy... again
Update Clippy
Update clippy
````
r? @oli-obk
2019-01-07 19:44:00 +00:00
Matthias Krüger
c5101b6dff Revert "Auto merge of #57101 - o01eg:fix-57014, r=alexcrichton"
This reverts commit 68614265d312fc2cbe8a696f7dabb9416eb6f221, reversing
changes made to cae623c5ce12df8f237264d8f2c31fdaa664c382.

Should fix tools on windows.

Reopens #57014
2019-01-07 18:57:41 +01:00
John Kåre Alsaker
23c742cce7 Rename some functions 2019-01-07 18:50:51 +01:00
John Kåre Alsaker
66fe06b1b9 Fix and optimize query profiling 2019-01-07 18:47:19 +01:00
Alex Crichton
255a3f3e18 std: Force Instant::now() to be monotonic
This commit is an attempt to force `Instant::now` to be monotonic
through any means possible. We tried relying on OS/hardware/clock
implementations, but those seem buggy enough that we can't rely on them
in practice. This commit implements the same hammer Firefox recently
implemented (noted in #56612) which is to just keep whatever the lastest
`Instant::now()` return value was in memory, returning that instead of
the OS looks like it's moving backwards.

Closes #48514
Closes #49281
cc #51648
cc #56560
Closes #56612
Closes #56940
2019-01-07 08:00:47 -08:00
Pietro Albini
c89b07aa52
Rollup merge of #57290 - mark-i-m:remove-outdated-comment, r=michaelwoerister
remove outdated comment

https://github.com/rust-lang/rust/issues/44234 was closed, apparently solved by #45353

r? @michaelwoerister
2019-01-07 16:25:33 +01:00
Vadim Petrochenkov
10a00e120d Make sure feature gate errors are recoverable (take 2) 2019-01-06 14:58:17 +03:00
bors
ad9068f874 Auto merge of #57230 - estebank:return-mismatch, r=varkor
Modify mismatched type error for functions with no return

Fix #50009.

```
error[E0308]: mismatched types
  --> $DIR/coercion-missing-tail-expected-type.rs:3:24
   |
LL | fn plus_one(x: i32) -> i32 { //~ ERROR mismatched types
   |    --------            ^^^ expected i32, found ()
   |    |
   |    this function's body doesn't return
LL |     x + 1;
   |          - help: consider removing this semicolon
   |
   = note: expected type `i32`
              found type `()`
```

instead of

```
error[E0308]: mismatched types
  --> $DIR/coercion-missing-tail-expected-type.rs:3:28
   |
LL |   fn plus_one(x: i32) -> i32 { //~ ERROR mismatched types
   |  ____________________________^
LL | |     x + 1;
   | |          - help: consider removing this semicolon
LL | | }
   | |_^ expected i32, found ()
   |
   = note: expected type `i32`
              found type `()`
```
2019-01-05 22:25:47 +00:00
kennytm
d9885c41de
Rollup merge of #57343 - Xanewok:querify-access-levels, r=nikomatsakis
Calculate privacy access only via query

Initially converted to query in a9f6babcda and then changed to respect dependencies 8281e883dd.

I did this as an effort to prune `CrateAnalysis` from librustc_save_analysis, with the only thing remaining being the glob map (`name` is unused, existing `crate_name` is exposed in the compiler passes, instead).

Since calculating the glob map is opt-in, it'd be great if we could calculate that on-demand. However, it seems that it'd require converting resolution to queries, which I'm not sure how to do yet.

In an effort to get rid of `CrateAnalysis` altogether, could we try unconditionally calculating the glob_map in the resolver, thus completely removing `CrateAnalysis` struct, and doing a perf run?

r? @nikomatsakis

cc @petrochenkov do you have any idea how/if at all could we querify the resolver? I've stumbled upon a comment that's ~3? years old at the moment, so I'm guessing things might have changed and it actually may be feasible now. fe0c10019d/src/librustc_driver/driver.rs (L589-L593)
2019-01-05 23:57:06 +08:00
kennytm
ab55ecf4ba
Rollup merge of #57314 - wiktorkuchta:master, r=Centril
Fix repeated word typos

Inspired by #57295 (I skipped 'be be' because of it) and my [PR in another repo
](https://github.com/e-maxx-eng/e-maxx-eng/pull/389)
Not a stupid `sed`, I actually tried to fix case by case.
2019-01-05 23:56:59 +08:00
kennytm
952af5e898
Rollup merge of #57295 - d-e-s-o:topic/be-be, r=zackmdavis
Fix 'be be' constructs

I noticed a duplicated "be" somewhere in the code. A search for it
manifested a couple more locations with the same problem. This change
removes one of the "be"s.
2019-01-05 23:56:53 +08:00
kennytm
6c58b842d6
Rollup merge of #57229 - mikeyhew:fix-56806, r=varkor
Fix #56806 by using `delay_span_bug` in object safety layout sanity checks

It's possible that `is_object_safe` is called on a trait method that with an invalid receiver type. This caused an ICE in #56806, because `receiver_is_dispatchable` returns `true` for `self: Box<dyn Trait>`, which causes one of the layout sanity checks in object_safety.rs to fail. Replacing `bug!` with `delay_span_bug` solves this.

The fact that `receiver_is_dispatchable` returns `true` here could be considered a bug. It passes the check that the method implements, though: `Box<dyn Trait>` implements `DispatchFromDyn<Box<dyn Trait>>` because `dyn Trait` implements `Unsize<dyn Trait>`. It would be good to hear what @eddyb and @nikomatsakis think.

Note that I only added a test for the case encountered in #56806. I could not come up with a case that triggered an ICE from the other check, `bug!("receiver when Self = dyn Trait should be ScalarPair, found Scalar")`. There is no way, to my knowledge, that you can make `receiver_is_dispatchable` return true but still have a `Scalar` ABI when `Self = dyn Trait`.

One other case I encountered while debugging #56806 was that if you have a type parameter `T` that implements `Deref<Target=Self>` and `DispatchFromDyn<T>`, and use it as a method receiver, it will cause an ICE during `is_object_safe` because `T` has no layout ([playground](https://play.rust-lang.org/?version=nightly&mode=debug&edition=2018&gist=d9b7497b3be0ca8382fa7d9497263214)):

```rust
trait Trait<T: Deref<Target=Self> + DispatchFromDyn<T>> {
    fn foo(self: T) -> dyn Trait<T>;
}
```

I don't intend to remove the ICE there because it is a pathological case, especially since there is no way to implement `DispatchFromDyn<T>` for `T` — the checks in typeck/coherence/builtin.rs do not allow that.

fixes #56806
r? @varkor
2019-01-05 23:56:44 +08:00
kennytm
aa83481a5c
Rollup merge of #57219 - matthewjasper:mir-cleanup, r=nikomatsakis
Remove some unused code

Closes #57096
2019-01-05 23:56:43 +08:00
bors
68614265d3 Auto merge of #57101 - o01eg:fix-57014, r=alexcrichton
Search codegen backends based on target libdir instead of sysroot

Fixes #57014

Fixes cases with custom libdir when it consists of two or more parts.
2019-01-05 12:21:44 +00:00
bors
2fba17fc97 Auto merge of #56837 - arielb1:nonprincipal-trait-objects, r=nikomatsakis
Add support for trait-objects without a principal

The hard-error version of #56481 - should be merged after we do something about the `traitobject` crate.

Fixes #33140.
Fixes #57057.

r? @nikomatsakis
2019-01-05 03:36:31 +00:00
bors
244b05db12 Auto merge of #56145 - weiznich:re_rebalance_coherence, r=nikomatsakis
Implement the Re-rebalance coherence RFC

This is the first time I touch anything in the compiler so just tell me if I got something wrong.

Big thanks to @sgrif for the pointers where to look for those things.
cc #55437
2019-01-05 00:49:12 +00:00
Michael Hewson
2433526809 use delay_span_bug instead of bug! when doing layout sanity check
It's possible that `is_object_safe` is called on a trait that is ill-formed, and we shouldn't ICE unless there are no errors being raised. Using `delay_span_bug` solves this.

fixes #56806
2019-01-04 17:43:18 -05:00
Igor Matuszewski
480d0f3a31 Remove unused name from CrateAnalysis 2019-01-04 20:01:01 +01:00
Igor Matuszewski
a1189ac058 Replace CrateAnalysis::access_levels with query 2019-01-04 19:12:48 +01:00
Artem Varaksa
632d58436a
Update src/librustc/ty/fold.rs
Co-Authored-By: wiktorkuchta <35867657+wiktorkuchta@users.noreply.github.com>
2019-01-04 17:49:35 +00:00
bors
d6d32ac25d Auto merge of #56723 - oli-obk:lazy_const, r=nikomatsakis
Don't emit `Unevaluated` from `const_eval`

cc @eddyb @RalfJung
2019-01-04 17:01:24 +00:00
Ariel Ben-Yehuda
10a89400cf alphabetize marker traits when printed
This makes sure they are printed in a compiler-version-independent
order, avoiding ui test instability.
2019-01-04 15:09:09 +02:00
Ariel Ben-Yehuda
0b511b7bd2 implement a hack to make traitobject 0.1.0 compile 2019-01-04 01:50:35 +02:00
Ariel Ben-Yehuda
7eb444e4f1 Revert "add coherence future-compat warnings for marker-only trait objects"
This reverts commit 760639635facb6c9a0926ac9278bcba71880b0b3.
2019-01-04 01:18:34 +02:00
Ariel Ben-Yehuda
391a7ebd83 add comment to <List<ExistentialPredicates>>::principal 2019-01-04 00:34:53 +02:00
Ariel Ben-Yehuda
4ab27b255c fix ppaux 2019-01-04 00:34:52 +02:00
Ariel Ben-Yehuda
571a15bd15 avoid giving a principal to marker-only trait objects
Fixes #33140.
2019-01-04 00:34:52 +02:00
Ariel Ben-Yehuda
3aa1503a61 add support for principal-less trait object types
should be a pure refactoring.
2019-01-04 00:34:52 +02:00
Matthew Jasper
65c1f54a06 Forbid impl Trait from referring to unnamable recursive types
There is no type T, such that `T = [T; 2]`, we should not allow this
to be circumvented by impl Trait.
2019-01-03 22:15:02 +00:00
Georg Semmler
a31dd0a2f7
Directly check if input_ty is a type parameter and therefore a
uncoverd type
2019-01-03 22:26:57 +01:00
Georg Semmler
1715be0e3c
Fix tidy 2019-01-03 22:26:51 +01:00
Georg Semmler
757d7ba9c9
Implement the re-rebalance coherence rfc 2019-01-03 22:26:40 +01:00
Matthew Jasper
7ba17aa72f Display impl Sized correctly
It used to display as just `impl`
2019-01-03 20:49:01 +00:00
Wiktor Kuchta
190d139f3a Fix repeated word typos
Found with `git grep -P '\b([a-z]+)\s+\1\b'`
2019-01-03 21:33:37 +01:00
bors
c0bbc3927e Auto merge of #55517 - nikomatsakis:universes, r=scalexm
Universes

This PR transitions the compiler to use **universes** instead of the **leak-check**. It is marked as [WIP] for a few reasons:

- The diagnostics at present are terrible =)
- This changes the behavior of coherence, regressing some things that used to compile

The goals of this PR at present are:

- To start getting some eyes on the code
- To do a crater run
- To see the full travis results (due to https://github.com/rust-lang/rust/issues/52452, I am not able to run the full test suite locally anymore at present)

The first few commits in the PR are changing how `evaluate` treats regions. We now track whether region comparisons occurred, reverting the "staticized" query approach that @arielb1 put in. The problem with "staticized" queries is that it relied on the leak-check to get higher-ranked things correct, and we are removing the leak-check in this PR series, so that caused problems.

You can see at the end a collection of test updates. Mostly we behave the same but with atrocious diagnostics, but there are a number of cases where we used to error and now no longer do, as well as single case where we used to **not** error but we now do (the coherence-subtyping change).

(Note: it would be possible to do a version of leak-check that propagates universe information and recover the old behavior. I am reluctant to do so because I'd like to leave us room to get more precise -- e.g., I want to eventually handle things like `exists<'a> { for<'b> { if ('a: 'b) { 'a: 'b } } }` which presently the leak-check cannot cope with etc. Also because it seems more consistent to me: most folks I've talked to expect the new behavior and are surprised to learn that binding sites were so significant before when it comes to coherence. One question is, though, to what extent are people relying on this in the wild?)
2019-01-03 17:18:15 +00:00
Daniel Mueller
a944ecfa15
Fix 'be be' constructs
I noticed a duplicated "be" somewhere in the code. A search for it
manifested a couple more locations with the same problem. This change
removes one of the "be"s.
2019-01-02 18:06:49 -08:00
Niko Matsakis
8e89184a7b rename type_moves_by_default to type_is_copy_modulo_regions 2019-01-02 17:35:06 -05:00
Niko Matsakis
4c8fd2e80a try to detect affected code and direct people to #56105 2019-01-02 17:35:06 -05:00
Niko Matsakis
2c17af0bf7 track if any region constraints involved placeholders 2019-01-02 17:35:06 -05:00
Niko Matsakis
13ea9b877c pacify the mercilous eddyb ;) 2019-01-02 17:35:06 -05:00
Niko Matsakis
c04563e1b0 add some comments about lifetimes etc 2019-01-02 17:35:06 -05:00
Niko Matsakis
cf2f7cccb4 pacify the mercilous tidy 2019-01-02 17:35:06 -05:00
Niko Matsakis
bc4404c0b5 improve handling for subtype
Still not great, but good enough to land this PR.
2019-01-02 17:35:06 -05:00
Niko Matsakis
a24e04dff6 say "the lifetime" instead of "some lifetime" when it feels right
In particular, when we want to indicate that there is a connection
between the self type and the other types.
2019-01-02 17:35:06 -05:00
Niko Matsakis
7bc3f5585a apply the same logic to ConcreteFailure errors 2019-01-02 17:35:06 -05:00