Commit graph

17881 commits

Author SHA1 Message Date
Michael Woerister
d94262272b Self-Profiling: Make names of existing events more consistent and use new API. 2019-09-30 13:31:56 +02:00
Michael Woerister
b0b073cdb0 Self-Profiling: Refactor SelfProfiler API to be RAII based where possible. 2019-09-30 13:30:47 +02:00
bors
d16ee891c6 Auto merge of #64673 - Mark-Simulacrum:opt-match-ck, r=oli-obk
Optimize try_eval_bits to avoid layout queries

This specifically targets match checking, but is possibly more widely
useful as well. In code with large, single-value match statements, we
were previously spending a lot of time running layout_of for the
primitive types (integers, chars) -- which is essentially useless. This
optimizes the code to avoid those query calls by directly obtaining the
size for these types, when possible.

It may be worth considering adding a `size_of` query in the future which
might be far faster, especially if specialized for "const" cases --
match arms being the most obvious example. It's possibly such a function
would benefit from *not* being a query as well, since it's trivially
evaluatable from the sty for many cases whereas a query needs to hash
the input and such.
2019-09-29 22:21:43 +00:00
Mark Rousskov
06c6e75aae Optimize try_eval_bits to avoid layout queries
This specifically targets match checking, but is possibly more widely
useful as well. In code with large, single-value match statements, we
were previously spending a lot of time running layout_of for the
primitive types (integers, chars) -- which is essentially useless. This
optimizes the code to avoid those query calls by directly obtaining the
size for these types, when possible.

It may be worth considering adding a `size_of` query in the future which
might be far faster, especially if specialized for "const" cases --
match arms being the most obvious example. It's possibly such a function
would benefit from *not* being a query as well, since it's trivially
evaluatable from the sty for many cases whereas a query needs to hash
the input and such.
2019-09-29 17:52:20 -04:00
Mazdak Farrokhzad
4ada68e325
Rollup merge of #64858 - skinny121:str-const-generics, r=varkor
Add support for relating slices in `super_relate_consts`

This allows passing strings as generic arguments.

Fixes #63773
Fixes #60813

r? @varkor
2019-09-29 20:34:16 +02:00
Mazdak Farrokhzad
8109332a4c
Rollup merge of #64825 - estebank:match-unit, r=Centril
Point at enclosing match when expecting `()` in arm

When encountering code like the following:

```rust
fn main() {
    match 3 {
        4 => 1,
        3 => {
            println!("Yep it maches.");
            2
        }
        _ => 2
    }
    println!("Bye!")
}
```

point at the enclosing `match` expression and suggest ignoring the
returned value:

```
error[E0308]: mismatched types
  --> $DIR/match-needing-semi.rs:8:13
   |
LL | /     match 3 {
LL | |         4 => 1,
LL | |         3 => {
LL | |             2
   | |             ^ expected (), found integer
LL | |         }
LL | |         _ => 2
LL | |     }
   | |     -- help: consider using a semicolon here
   | |_____|
   |       expected this to be `()`
   |
   = note: expected type `()`
              found type `{integer}
```

Fix #40799.
2019-09-29 20:34:15 +02:00
bors
06c68947ad Auto merge of #64158 - tmandry:libtest-panic-abort, r=alexcrichton
panic=abort support in libtest

Add experimental support for tests compiled with panic=abort. Enabled with `-Z panic_abort_tests`.

r? @alexcrichton
cc @cramertj
2019-09-29 13:53:08 +00:00
bors
d046ffddc4 Auto merge of #64546 - weiznich:bugfix/rfc-2451-rerebalance-tests, r=nikomatsakis
Bugfix/rfc 2451 rerebalance tests

r? @nikomatsakis

Fixes #64412
Depends/Contains on #64414

cc #55437 and #63599
2019-09-29 09:52:58 +00:00
bors
fe2f7e0e53 Auto merge of #64886 - Centril:rollup-30dqh8j, r=Centril
Rollup of 5 pull requests

Successful merges:

 - #63492 (Remove redundancy from the implementation of C variadics.)
 - #64589 (Differentiate AArch64 bare-metal targets between hf and non-hf.)
 - #64799 (Fix double panic when printing query stack during an ICE)
 - #64824 (No StableHasherResult everywhere)
 - #64884 (Add pkg-config to dependency list if building for Linux on Linux)

Failed merges:

r? @ghost
2019-09-29 06:08:50 +00:00
Mazdak Farrokhzad
d7d7c2fce2
Rollup merge of #64824 - Mark-Simulacrum:no-stable-hasher-result-everywhere, r=michaelwoerister
No StableHasherResult everywhere

This removes the generic parameter on `StableHasher`, instead moving it to the call to `finish`. This has the side-effect of making all `HashStable` impls nicer, since we no longer need the verbose `<W: StableHasherResult>` that previously existed -- often forcing line wrapping.

This is done for two reasons:
 * we should avoid false "generic" dependency on the result of StableHasher
     * we don't need to codegen two/three copies of all the HashStable impls when they're transitively used to produce a fingerprint, u64, or u128. I haven't measured, but this might actually make our artifacts somewhat smaller too.
 * Easier to understand/read/write code -- the result of the stable hasher is irrelevant when writing a hash impl.
2019-09-29 04:36:02 +02:00
Mazdak Farrokhzad
b30d9beafb
Rollup merge of #64799 - Aaron1011:fix/double-panic, r=Mark-Simulacrum
Fix double panic when printing query stack during an ICE

On the latest nightly, any call to `bug` or `span_bug` will result in two panics - the first one as a normal result of calling `bug` / `span_bug`, and the second as a result of trying to print the query stack from the panic handler. This is caused by the query-printing code attempting to acquire a lock on `HandlerInnder`, which is still being held by `bug`.

This PR moves the actual panic out of `HandlerInner`, into `Handler`. This allows us to release the lock on `HandlerInner` before triggering the panic, ensuring that the panic handler will be able to acquire the lock if necessary.
2019-09-29 04:36:01 +02:00
Mazdak Farrokhzad
37333b5131
Rollup merge of #63492 - eddyb:cvarargs, r=nagisa,matthewjasper
Remove redundancy from the implementation of C variadics.

This cleanup was first described in https://github.com/rust-lang/rust/issues/44930#issuecomment-497163539:

* AST doesn't track `c_variadic: bool` anymore, relying solely on a trailing `CVarArgs` type in fn signatures
* HIR doesn't have a `CVarArgs` anymore, relying solely on `c_variadic: bool`
  * same for `ty::FnSig` (see tests for diagnostics improvements from that)
  * `{hir,mir}::Body` have one extra argument than the signature when `c_variadic == true`
  * `rustc_typeck` and `rustc_mir::{build,borrowck}` need to give that argument the right type (which no longer uses a lifetime parameter, but a function-internal scope)
* `rustc_target::abi::call` doesn't need special hacks anymore (since it never sees the `VaListImpl` now, it's all inside the body)

r? @nagisa / @rkruppe cc @dlrobertson @oli-obk
2019-09-29 04:35:58 +02:00
bors
0bbab7d99d Auto merge of #64470 - ecstatic-morse:split-promotion-and-validation, r=eddyb,oli-obk
Implement dataflow-based const validation

This PR adds a separate, dataflow-enabled pass that checks the bodies of `const`s, `static`s and `const fn`s for [const safety](https://github.com/rust-rfcs/const-eval/blob/master/const.md). This is based on my work in #63860, which tried to integrate into the existing pass in [`qualify_consts.rs`](https://github.com/rust-lang/rust/blob/master/src/librustc_mir/transform/qualify_consts.rs). However, the resulting pass was even more unwieldy than the original. Unlike its predecessor, this PR is designed to be combined with #63812 to replace the existing pass completely.

The new checker lives in [`librustc_mir/transform/check_consts`](https://github.com/ecstatic-morse/rust/tree/split-promotion-and-validation/src/librustc_mir/transform/check_consts).

[`qualifs.rs`](https://github.com/ecstatic-morse/rust/blob/split-promotion-and-validation/src/librustc_mir/transform/check_consts/qualifs.rs) contains small modifications to the existing `Qualif` trait and its implementors, but is mostly unchanged except for the removal of `IsNotPromotable` and `IsNotImplicitlyPromotable`, which are only necessary for promotion.

[`resolver.rs`](https://github.com/ecstatic-morse/rust/blob/split-promotion-and-validation/src/librustc_mir/transform/check_consts/resolver.rs) contains the dataflow analysis used to propagate qualifs between locals.

Finally, [`validation.rs`](https://github.com/ecstatic-morse/rust/blob/split-promotion-and-validation/src/librustc_mir/transform/check_consts/validation.rs) contains a refactored version of the existing [`Visitor`](ca3766e2e5/src/librustc_mir/transform/qualify_consts.rs (L1024)) in `qualfy_consts.rs`. All errors have been associated with a `struct` to make [comparison with the existing pass](1c19f2d540/src/librustc_mir/transform/qualify_consts.rs (L1006)) simple.

The existing validation logic in [`qualify_consts`](https://github.com/rust-lang/rust/blob/master/src/librustc_mir/transform/qualify_consts.rs) has been modified to allow it to run in parallel with the new validator. If [`use_new_validator`](https://github.com/rust-lang/rust/pull/64470/files#diff-c2552a106550d05b69d5e07612f0f812R950) is not set, the old validation will be responsible for actually generating the errors, but those errors can be compared with the ones from the new validator.
2019-09-29 02:33:15 +00:00
Tyler Mandry
3f0254e3cf Put panic=abort test support behind -Z panic_abort_tests 2019-09-28 13:52:18 -07:00
Mazdak Farrokhzad
01075d8f6b
Rollup merge of #64763 - GuillaumeGomez:long-err-explanation-E0734, r=estebank
Add E0734 and its long explanation

Part of https://github.com/rust-lang/rust/issues/61137
2019-09-28 22:12:02 +02:00
Mazdak Farrokhzad
05881d046e
Rollup merge of #64678 - tomtau:fix/no-std-error, r=matthewjasper
added more context for duplicate lang item errors (fixes #60561)

Some more information about #60561 -- these errors are pretty common when one works in restrictive environments with `no_std` or customized `std`, but they don't provide much context for debugging, as any transitive dependency could have brought in `std` crate. With that, currently, one needs to use something like `cargo tree` and investigate transitive dependencies one by one.

It'll be more helpful to know at least the crate that uses `std` (which `cargo tree` doesn't show) to pin down this investigation when debugging.

I'm not sure what the best way to get this context is inside rustc internals (I'm new to them). I found that `all_crate_nums` query returns the crates in some dependency order, so printing out the name of the preceding crate seems to do the trick. But I welcome suggestions if this can be done in a better way.
2019-09-28 22:12:01 +02:00
Esteban Küber
c861e24e72 clean up 2019-09-28 09:56:28 -07:00
Esteban Küber
ae51953e80 review comments 2019-09-28 09:56:28 -07:00
Esteban Küber
8a167edbca Point at enclosing match when expecting () in arm
When encountering code like the following:

```rust
fn main() {
    match 3 {
        4 => 1,
        3 => {
            println!("Yep it maches.");
            2
        }
        _ => 2
    }
    println!("Bye!")
}
```

point at the enclosing `match` expression and suggest ignoring the
returned value:

```
error[E0308]: mismatched types
  --> $DIR/match-needing-semi.rs:8:13
   |
LL | /     match 3 {
LL | |         4 => 1,
LL | |         3 => {
LL | |             2
   | |             ^ expected (), found integer
LL | |         }
LL | |         _ => 2
LL | |     }
   | |     -- help: consider using a semicolon here
   | |_____|
   |       expected this to be `()`
   |
   = note: expected type `()`
              found type `{integer}
```

Fix #40799.
2019-09-28 09:56:28 -07:00
bors
488381ce9e Auto merge of #64419 - wesleywiser:const_prop_use_ecx, r=oli-obk
Deduplicate some code between miri and const prop

r? @oli-obk
2019-09-28 15:54:12 +00:00
Mark Rousskov
14a5aefb01 Switch over all StableHash impls to new format 2019-09-28 11:47:36 -04:00
Eduard-Mihai Burtescu
a88d181a02 rustc: rely on c_variadic == true instead of CVarArgs in HIR/Ty fn signatures. 2019-09-28 17:39:00 +03:00
Eduard-Mihai Burtescu
7683d1c3aa rustc: don't store a lifetime in hir::TyKind::CVarArgs. 2019-09-28 17:39:00 +03:00
Eduard-Mihai Burtescu
8a9d775888 syntax: don't keep a redundant c_variadic flag in the AST. 2019-09-28 17:38:59 +03:00
Dylan MacKenzie
bc7928a507 Trigger ICE on nightly if validators disagree
Also adds an unstable flag to disable the ICE
(`-Zsuppress-const-validation-back-compat-ice`) so that nightly users do
not have to revert to a previous nightly if their code causes
disagreement between the validators.
2019-09-28 07:06:52 -07:00
Mazdak Farrokhzad
017944c5a7
Rollup merge of #64859 - Centril:const-def-here-new-var, r=estebank
check_match: improve diagnostics for `let A = 2;` with `const A: i32 = 3`

For example:

```
error[E0005]: refutable pattern in local binding: `std::i32::MIN..=1i32` and `3i32..=std::i32::MAX` not covered
  --> $DIR/const-pat-non-exaustive-let-new-var.rs:2:9
   |
LL |     let A = 3;
   |         ^
   |         |
   |         interpreted as a constant pattern, not a new variable
   |         help: introduce a variable instead: `a_var`
...
LL |     const A: i32 = 2;
   |     ----------------- constant defined here
```

r? @estebank
cc @matthiaskrgr @rpjohnst
2019-09-28 05:38:00 +02:00
Mazdak Farrokhzad
fc53088a5c
Rollup merge of #64830 - Centril:thou-shallt-not-abort, r=estebank
Thou shallt not `.abort_if_errors()`

r? @estebank
2019-09-28 05:37:52 +02:00
Mazdak Farrokhzad
00cba5b092
Rollup merge of #64809 - davidtwco:issue-64768-target-feature-const, r=varkor
hir: Disallow `target_feature` on constants

Fixes #64768.

This PR fixes an ICE when `#[target_feature]` is applied to constants by disallowing this with the same error as when `#[target_feature]` is applied to other places it shouldn't be.

I couldn't see anything in the [RFC](https://github.com/rust-lang/rfcs/blob/master/text/2045-target-feature.md) that suggested that `#[target_feature]` should be applicable to constants or any tests that suggested it should, though I might have missed something - if this is desirable in future, it remains possible to remove this error (but for the time being, I think this error is better than an ICE).

I also added some extra cases to the test for other places where `#[target_feature]` should not be permitted.

cc @gnzlbg
2019-09-28 05:37:47 +02:00
Mazdak Farrokhzad
5b6a5801fb
Rollup merge of #64802 - estebank:walk-parents-iterator, r=matthewjasper
Account for tail expressions when pointing at return type

When there's a type mismatch we make an effort to check if it was
caused by a function's return type. This logic now makes sure to
only point at the return type if the error happens in a tail
expression.

Turn `walk_parent_nodes` method into an iterator.

CC #39968, CC #40799.
2019-09-28 05:37:46 +02:00
Mazdak Farrokhzad
85175b719b
Rollup merge of #64794 - Mark-Simulacrum:rm-dep-track-map, r=estebank
Remove unused DepTrackingMap

Deletes some related code (MemoizationMap trait, etc.)

I believe this became unused with red/green incremental introduction, but am uncertain.
2019-09-28 05:37:44 +02:00
Mazdak Farrokhzad
4db233e454
Rollup merge of #64781 - Mark-Simulacrum:no-global-tcx, r=eddyb
Remove stray references to the old global tcx
2019-09-28 05:37:43 +02:00
ben
c94fea092e Move get_slice_bytes to rustc::mir::interpret so it can be reused. 2019-09-28 14:35:04 +12:00
ben
875fa72f9e Add inline function get_slice_bytes to remove code duplication. 2019-09-28 13:30:26 +12:00
Mazdak Farrokhzad
aa03f1f5e3 Improve diagnostic for let A = 0;
where `A` is a constant, not a new variable.
2019-09-28 03:07:31 +02:00
Wesley Wiser
dcc6c28c53 Introduce a ConstPropMachine
This allows us to avoid changing things directly in the miri engine just
for const prop.
2019-09-27 20:11:13 -04:00
Wesley Wiser
4e58e2e3a3 Work around for #64506 2019-09-27 20:11:13 -04:00
Wesley Wiser
bc17936c8a [const-prop] Replace eval_place() with use of InterpCx 2019-09-27 20:11:12 -04:00
ben
22b87a5515 Add support for relating slices in super_relate_consts. 2019-09-28 10:05:37 +12:00
Mazdak Farrokhzad
0022baae00 Inline the remaining hir::Arm::top_pats_hack 2019-09-27 19:54:25 +02:00
Mazdak Farrokhzad
dfd365f3e4 cleanup dead ast-borrowck / migrate-mode code. 2019-09-27 19:48:07 +02:00
Mazdak Farrokhzad
defd5088d6 cleanup check_match wrt. SignalledError. 2019-09-27 19:48:07 +02:00
Mazdak Farrokhzad
1eb280e2d8 Remove unpretty=flowgraph. 2019-09-27 19:48:07 +02:00
Mark Rousskov
4b23503b42 Remove shrink_to_tcx_lifetime
There's no longer two distinct gcx and tcx lifetimes which made this
necessary (or, at least, the code compiles -- it's possible we got
better at normalizing, but that seems unlikely).
2019-09-27 13:34:17 -04:00
Mark Rousskov
0a4d55ddb8 Remove stray uses of gcx name 2019-09-27 13:34:14 -04:00
Mark Rousskov
f226ab4ad9 Remove lift_to_global 2019-09-27 13:33:50 -04:00
Mark Rousskov
d540d44c71 Remove global_tcx from TyCtxt
The non-global context was removed; there's only one context now. This
is a noop method that only serves to confuse readers -- remove it.
2019-09-27 13:33:48 -04:00
Esteban Küber
a284822e00 fix rebase 2019-09-27 09:47:37 -07:00
Esteban Küber
e537d066f2 review comments 2019-09-27 09:34:51 -07:00
Esteban Küber
46a38dc183 Account for tail expressions when pointing at return type
When there's a type mismatch we make an effort to check if it was
caused by a function's return type. This logic now makes sure to
only point at the return type if the error happens in a tail
expression.
2019-09-27 09:34:51 -07:00
Esteban Küber
faee8e1756 Turn walk_parent_nodes method into an iterator 2019-09-27 09:34:03 -07:00