Commit graph

99661 commits

Author SHA1 Message Date
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
Mazdak Farrokhzad
0022baae00 Inline the remaining hir::Arm::top_pats_hack 2019-09-27 19:54:25 +02:00
Mazdak Farrokhzad
a07b030998 Remove AccessKind::Move. 2019-09-27 19:48:07 +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
Mazdak Farrokhzad
463b19790b don't borrowck::check_crate(tcx) anymore. 2019-09-27 19:48:06 +02:00
Mazdak Farrokhzad
83dcdd99dd Remove librustc_ast_borrowck from driver & interface. 2019-09-27 19:48:06 +02:00
Mazdak Farrokhzad
a094926096 rm -rf librustc_ast_borrowck 2019-09-27 19:48:06 +02:00