99862 Commits

Author SHA1 Message Date
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
bors
b61e694339 Auto merge of #64883 - Centril:rollup-uehjt63, r=Centril
Rollup of 10 pull requests

Successful merges:

 - #64131 (data_structures: Add deterministic FxHashMap and FxHashSet wrappers)
 - #64387 (Fix redundant semicolon lint interaction with proc macro attributes)
 - #64678 (added more context for duplicate lang item errors (fixes #60561))
 - #64763 (Add E0734 and its long explanation)
 - #64793 (Fix format macro expansions spans to be macro-generated)
 - #64837 (Improve wording in documentation of MaybeUninit)
 - #64852 (Print ParamTy span when accessing a field (#52082))
 - #64875 (Upgrade async/await to "used" keywords.)
 - #64876 (Fix typo in intrinsics op safety)
 - #64880 (Slice docs: fix typo)

Failed merges:

r? @ghost
2019-09-28 22:42:58 +00:00
Tyler Mandry
3f0254e3cf Put panic=abort test support behind -Z panic_abort_tests 2019-09-28 13:52:18 -07:00
Tyler Mandry
88376842a0 Add test for libtest panic=abort mode 2019-09-28 13:52:18 -07:00
Tyler Mandry
8ae1ec60cc Spawn one subprocess per unit test when panic=abort 2019-09-28 13:52:18 -07:00
Tyler Mandry
76b12bd8fd Support run-fail ui tests 2019-09-28 13:50:52 -07:00
=
ea347b619e
linux -> Linux 2019-09-28 14:18:29 -06:00
=
b3907fd3c6
add pkg-config to dependencies 2019-09-28 14:17:09 -06:00
Mazdak Farrokhzad
46526718b1
Rollup merge of #64880 - llogiq:slice-docs, r=Centril
Slice docs: fix typo

With #64703, I introduced a typo. Here is the fix. Sorry for the inconvenience.
2019-09-28 22:12:11 +02:00
Mazdak Farrokhzad
1c2dd143f3
Rollup merge of #64876 - vertexclique:vcq/fix-fn-name-intrinsic-op-unsafety, r=varkor
Fix typo in intrinsics op safety

Title pretty much sums up.
2019-09-28 22:12:10 +02:00
Mazdak Farrokhzad
787829d54a
Rollup merge of #64875 - ehuss:async-await-reserved, r=estebank
Upgrade async/await to "used" keywords.

AFAIK, this only affects error messages, removing the word "reserved".

Closes #64853
2019-09-28 22:12:08 +02:00
Mazdak Farrokhzad
6145757a26
Rollup merge of #64852 - Baranowski:param_note_52082, r=estebank
Print ParamTy span when accessing a field (#52082)
2019-09-28 22:12:07 +02:00
Mazdak Farrokhzad
69a3009cbf
Rollup merge of #64837 - nliberg:patch-2, r=Centril
Improve wording in documentation of MaybeUninit

Changes

> variables are properly initialized **at** their respective type

into

> variables are properly initialized **as** their respective type
2019-09-28 22:12:06 +02:00
Mazdak Farrokhzad
d9168e4cfa
Rollup merge of #64793 - immunant:format_spans, r=matthewjasper
Fix format macro expansions spans to be macro-generated

New Exprs generated as part of the format macro expansion should get the macro
expansion span with an expansion context, rather than the span of the format string
which does not.
2019-09-28 22:12:04 +02: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
Mazdak Farrokhzad
55a3eada4d
Rollup merge of #64387 - nathanwhit:redundant-semi-fix, r=varkor
Fix redundant semicolon lint interaction with proc macro attributes

Fixes #63967 and fixes #63947, both of which were caused by the lint's changes to the parser interacting poorly with proc macro attributes and causing span information to be lost

r? @varkor
2019-09-28 22:11:59 +02:00
Mazdak Farrokhzad
b18d8612c8
Rollup merge of #64131 - shivan1b:deterministic-fxhashmap, r=Mark-Simulacrum
data_structures: Add deterministic FxHashMap and FxHashSet wrappers

StableMap
A wrapper for FxHashMap that allows to `insert`, `remove`, `get`, `get_mut` and convert a hashmap into a sorted vector using the method `into_sorted_vector` but no iteration support.

StableSet
A wrapper for FxHashSet that allows to `insert`, `remove`, `get` and convert a hashset into a sorted vector using the method `into_sorted_vector` but no iteration support.

Addresses issue #63713
2019-09-28 22:11:58 +02:00
ben
54bad93030 Add a couple more test cases, including non-ascii strings. 2019-09-29 08:39:48 +13:00
Andre Bogus
e77dfa27ca Slice docs: fix typo 2019-09-28 21:02:51 +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
Mahmut Bulut
c666bd5570
Fix typo in intrinsics op safety 2019-09-28 18:24:05 +02:00
Eric Huss
f6ceccea93 Upgrade async/await to "used" keywords. 2019-09-28 09:15:06 -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
Mark Rousskov
f60e58e575 StableHasher does not need to be generic over the Result type 2019-09-28 11:47:15 -04:00
Eduard-Mihai Burtescu
057f23d3dd rustc_codegen_ssa: remove redundant va_list_ref field from FunctionCx. 2019-09-28 17:39:00 +03: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
0bf1a80b32 Rename sty to kind
Picks up changes made in #64513
2019-09-28 07:20:12 -07:00
Dylan MacKenzie
ff4158abf2 Bless miri unleashed output 2019-09-28 07:06:52 -07:00
Dylan MacKenzie
f2e7faf153 Revert "Use conservative, type-based qualifcation for statics"
This reverts commit ac7a343cef8287427a98b9210cdb1a772486be10.
2019-09-28 07:06:52 -07:00
Dylan MacKenzie
8bfe82bfad Correct IndirectlyMutableLocals docs 2019-09-28 07:06:52 -07:00
Dylan MacKenzie
a302055caa Mask results from flow-sensitive resolver with in_any_value_of_ty
We relied previously on the caller (e.g. `Q::in_operand`) to ignore
`Local`s that were indirectly mutable (and thus assumed to be
qualified). However, it's much clearer (and more efficient) to do this
in the resolver itself.

This does not yet remove the masking done in `Q::in_operand` and others
for safety's sake, although I believe that should now be possible.
2019-09-28 07:06:52 -07:00
Dylan MacKenzie
ff6faabda7 Add description for every module in check_consts 2019-09-28 07:06:52 -07:00
Dylan MacKenzie
713ec152fc Share IndirectlyMutableLocals results via reference 2019-09-28 07:06:52 -07:00
Dylan MacKenzie
1a14d17c4d Require fmt::Debug to implement NonConstOp 2019-09-28 07:06:52 -07:00
Dylan MacKenzie
dcecefcb71 Use conservative, type-based qualifcation for statics 2019-09-28 07:06:52 -07:00
Dylan MacKenzie
2f5ea633d4 Return a bool from in_any_value_of_ty
The `Option` was only used for the promotion qualifiers, so we can use a
simpler API for validation.
2019-09-28 07:06:52 -07:00
Dylan MacKenzie
406ac2e14b Give usage instructions IndirectlyMutableLocals docs 2019-09-28 07:06:52 -07: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
Dylan MacKenzie
93ee7791b6 Explain why visit_terminator does nothing for IndirectlyMutableLocals 2019-09-28 07:06:52 -07:00
Dylan MacKenzie
b3e59bb291 Move non-const ops into their own module 2019-09-28 07:06:52 -07:00
Dylan MacKenzie
e296436ee0 Remember to replace ICE with some form of warning 2019-09-28 07:06:52 -07:00
Dylan MacKenzie
f2ff425622 Add rationale for suppress_errors flag 2019-09-28 07:06:52 -07:00
Dylan MacKenzie
27bd84916c Correct list of miri-supported operations
Heap allocations are out, indirect `fn` calls are in!
2019-09-28 07:06:52 -07:00
Dylan MacKenzie
670c84dde3 Fix tests broken by more consistent miri unleashed warnings 2019-09-28 07:06:52 -07:00