Commit graph

99669 commits

Author SHA1 Message Date
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
Dylan MacKenzie
c990243922 Run new validator in compare mode 2019-09-28 07:06:52 -07:00
Dylan MacKenzie
fc92d3b820 Add dataflow-based const validation 2019-09-28 07:06:52 -07:00
Dylan MacKenzie
3698d04fef Pass current qualification state in a separate parameter 2019-09-28 07:06:52 -07:00
Dylan MacKenzie
908dcb80b7 Control whether a Qualif is cleared on move 2019-09-28 07:06:51 -07:00
Dylan MacKenzie
3758e383a6 Remove reference to Mode::NonConstFn in qualifs
This should have no effect on behavior since the validator is never run
in const contexts.
2019-09-28 07:06:51 -07:00
Dylan MacKenzie
48d3843be6 Add requisite imports and bitset to hold qualifs 2019-09-28 07:06:51 -07:00
Dylan MacKenzie
c2e121da08 Make new qualifs public 2019-09-28 07:06:51 -07:00
Dylan MacKenzie
3a5442a891 Remove unnecessary method 2019-09-28 07:06:51 -07:00
Dylan MacKenzie
eec93ca08c Copy Qualif to start work on new const validator
This is an exact copy of the `Qualif` trait from `qualify_consts.rs` and
its first two implementers, `HasMutInterior` and `NeedsDrop`.
2019-09-28 07:06:51 -07:00
Dylan MacKenzie
83a3e04ed0 Don't treat locals as mutably borrowed after they're dropped 2019-09-28 07:06:51 -07:00
Dylan MacKenzie
e81297d990 Add analysis to determine if a local is indirectly mutable
This adds a dataflow analysis that determines if a reference to a given
`Local` or part of a `Local` that would allow mutation exists before a
point in the CFG. If no such reference exists, we know for sure that
that `Local` cannot have been mutated via an indirect assignment or
function call.
2019-09-28 07:06:51 -07:00
Dylan MacKenzie
457c3aa672 Add additional const tests 2019-09-28 07:06:51 -07:00
Dylan MacKenzie
717c64e188 Silence "skipping const checks" if outside a const context 2019-09-28 07:06:51 -07:00
bors
f3c8eba643 Auto merge of #64864 - Centril:rollup-pxz6tw3, r=Centril
Rollup of 14 pull requests

Successful merges:

 - #64703 (Docs: slice elements are equidistant)
 - #64745 (Include message on tests that should panic but do not)
 - #64781 (Remove stray references to the old global tcx)
 - #64794 (Remove unused DepTrackingMap)
 - #64802 (Account for tail expressions when pointing at return type)
 - #64809 (hir: Disallow `target_feature` on constants)
 - #64815 (Fix div_duration() marked as stable by mistake)
 - #64818 (update rtpSpawn's parameters type(It's prototype has been updated in libc))
 - #64830 (Thou shallt not `.abort_if_errors()`)
 - #64836 (Stabilize map_get_key_value feature)
 - #64845 (pin.rs: fix links to primitives in documentation)
 - #64847 (Upgrade env_logger to 0.7)
 - #64851 (Add mailmap entry for Dustin Bensing by request)
 - #64859 (check_match: improve diagnostics for `let A = 2;` with `const A: i32 = 3`)

Failed merges:

r? @ghost
2019-09-28 03:38:48 +00: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
f1a5bc57aa
Rollup merge of #64851 - Mark-Simulacrum:mailmap-update, r=varkor
Add mailmap entry for Dustin Bensing by request

This should deduplicate entries from @pythoneer between the stdarch submodule and this repo itself on thanks.rust-lang.org.
2019-09-28 05:37:58 +02:00
Mazdak Farrokhzad
e3a5179c7e
Rollup merge of #64847 - mati865:env_logger, r=alexcrichton
Upgrade env_logger to 0.7

`./x.py test` passed locally.
2019-09-28 05:37:57 +02:00
Mazdak Farrokhzad
b71f6d8c95
Rollup merge of #64845 - rusty-snake:patch-1, r=jonas-schievink
pin.rs: fix links to primitives in documentation
2019-09-28 05:37:56 +02:00
Mazdak Farrokhzad
494a8a8525
Rollup merge of #64836 - lzutao:stabilize-map_get_key_value, r=SimonSapin
Stabilize map_get_key_value feature

FCP done in https://github.com/rust-lang/rust/issues/49347#issuecomment-521728031
r? @SimonSapin
Closes #49347
2019-09-28 05:37:54 +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
2d4c101af5
Rollup merge of #64818 - Wind-River:master, r=alexcrichton
update rtpSpawn's parameters type(It's prototype has been updated in libc)

r? @alexcrichton
2019-09-28 05:37:51 +02:00
Mazdak Farrokhzad
e2823c91d0
Rollup merge of #64815 - JMS55:patch-1, r=jonas-schievink
Fix div_duration() marked as stable by mistake
2019-09-28 05:37:49 +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
Mazdak Farrokhzad
a60ac8ee0b
Rollup merge of #64745 - kennethbgoodin:should-panic-msg, r=varkor
Include message on tests that should panic but do not

As per issue #60790 includes a message for tests marked `#[should_panic]` that do not panic as expected.

Fixes #60790.
2019-09-28 05:37:42 +02:00
Mazdak Farrokhzad
4c57882cfd
Rollup merge of #64703 - llogiq:slices-elems-are-equidistant, r=rkruppe
Docs: slice elements are equidistant

Recently, someone asked why `[char]` and `str` are not interchangeable, and I explained that in a slice, the elements must be laid out equidistantly, whereas the chars in a `str` are stored compactly regardless their size. However I couldn't find this documented anywhere, so here's a small addition of this fact.
2019-09-28 05:37:40 +02: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
bors
c6f87c2c6e Auto merge of #64790 - Centril:rip-ast-borrowck, r=matthewjasper
Rest In Peace, AST borrowck (2012-2019)

After having served us for 7 years, the AST borrow-checker is no more.

This PR starts from the commit `rm -rf librustc_ast_borrowck`, building on https://github.com/rust-lang/rust/pull/64221, and is probably best read commit by commit.

Migrate mode is not removed yet as it may be useful for NLL => polonius and it is also used for the `mutable_borrow_reservation_conflict` issue (https://github.com/rust-lang/rust/issues/59159).

r? @matthewjasper

------------------------

![ast-borrowck-rip](https://user-images.githubusercontent.com/855702/65646791-91a87600-dffc-11e9-9814-deed6b821c80.png)
2019-09-27 21:17:09 +00:00
Mazdak Farrokhzad
001357f971 --bless --compare-mode=nll 2019-09-27 20:14:47 +02:00
Mazdak Farrokhzad
99204028ac -Z unpretty message: include expanded,hygiene 2019-09-27 19:54:25 +02:00