Nicholas Nethercote
8c7433a3cc
Avoid allocations in has_any_child_of
.
...
`has_any_child_of` is hot. It allocates a `Vec` that almost always
doesn't exceed a length of 1.
This patch peels off the first iteration of the loop, avoiding the need
for the `Vec` creation in ~99% of cases.
2018-06-19 09:37:26 +10:00
Felix S. Klock II
fbe7d5bce8
When NLL has illegal move due to borrowed content, provide feedback about why the move wasn't a copy.
...
This should address #51190 .
2018-06-06 22:42:27 +02:00
bors
20af72b943
Auto merge of #51106 - davidtwco:issue-50934, r=nikomatsakis
...
Optimize the way that loans are killed in borrowck dataflow
Fixes #50934 .
r? @nikomatsakis
2018-05-30 09:24:20 +00:00
Felix S. Klock II
24abe6f363
rust-lang/rust#27282 : Add StatementKind::ReadForMatch
to MIR.
...
(This is just the data structure changes and some boilerplate match
code that followed from it; the actual emission of these statements
comes in a follow-up commit.)
2018-05-29 23:01:36 +02:00
Niko Matsakis
3a9134dec5
fix off by one error
2018-05-29 15:09:48 -04:00
Niko Matsakis
948f77c71f
tweak debug output some more
2018-05-29 15:09:37 -04:00
David Wood
62b1e6532a
Ensure that all statements in block are visited not just successors of a block.
2018-05-29 19:38:04 +01:00
Niko Matsakis
9c637144f5
add some debugging statements
2018-05-29 14:03:26 -04:00
David Wood
4500fe004b
Refactored DFS to be much cleaner. Added continue after noting that borrow is out of scope at location.
2018-05-29 18:22:01 +01:00
David Wood
24ee506913
Ensure that depth first search does not get stuck in cycles.
2018-05-27 22:26:10 +01:00
David Wood
0eeebe1795
Ensure that we don't skip the last statement.
2018-05-27 11:31:05 +01:00
David Wood
bbcace5080
Use precomputed DFS of borrows that out of scope at a location.
2018-05-27 11:15:52 +01:00
Santiago Pastorino
8429d11a0b
Use AllFacts from polonius-engine
2018-05-24 19:56:02 -03:00
David Wood
280c6fadee
Remove extra calls to kill_loans_out_of_scope_at_location - keep only before_statement_effect and before_terminator_effect.
2018-05-19 15:39:38 +01:00
Felix S. Klock II
b00db7c75b
Instrument statement_effect_on_borrows
for the lhs = &place
case.
2018-05-03 14:03:16 +02:00
Eduard-Mihai Burtescu
f0f26b875a
rustc: return impl Iterator from Terminator(Kind)::successors(_mut).
2018-05-01 13:12:23 +03:00
Niko Matsakis
45d281d7fa
remove -Znll -- borrowck=mir implies nll now
2018-04-15 07:13:42 -04:00
Niko Matsakis
df233f0f2c
stop using borrows
for anything but iterating over live data
2018-04-15 07:06:30 -04:00
Niko Matsakis
d4005a2bc9
thread borrow-set around more
2018-04-15 07:06:30 -04:00
Niko Matsakis
a849da626d
remove ReserveOrActivateIndex
2018-04-15 07:06:29 -04:00
Niko Matsakis
d32e5aac3d
use the activations_at_location
map to check activations
...
Not gen bits
2018-04-15 07:06:29 -04:00
Niko Matsakis
8e783da222
encapsulate ReserveOrActivateIndex into the borrows dataflow
2018-04-15 07:06:29 -04:00
Niko Matsakis
5f7b74f832
construct the BorrowSet
outside of borrows
2018-04-15 07:06:29 -04:00
Niko Matsakis
e1123674b1
extract code to build borrow-set into borrow_check::borrow_set
...
Also:
- Extract common helper functions into a helper trait.
- Kill a bit of dead code.
2018-04-15 07:06:29 -04:00
Niko Matsakis
70592664b6
relocate BorrowData
etc into borrow_check::borrow_set
2018-04-15 07:06:27 -04:00
Niko Matsakis
6c528ce784
gather activation locations for 2-phase borrows in 1 pass
2018-04-15 06:56:48 -04:00
Niko Matsakis
517e7fd2a1
remove assigned_map
(appears to be dead code)
2018-04-15 06:56:48 -04:00
bors
056f589fb8
Auto merge of #49678 - bobtwinkles:fix_multiple_activations, r=nikomatsakis
...
two-phase borrows: support multiple activations in one statement
The need for this has arisen since the introduction of two-phase borrows on
method autorefs in #49348 . r'ing @pnkfelix to keep things off Niko's plate so he can make this redundant, and @pnkfelix is familiar with the code.
Fixes #49635
Fixes #49662
r? @pnkfelix
2018-04-07 19:49:39 +00:00
Vadim Petrochenkov
3a30bad6de
Use Ident
instead of Name
in MetaItem
2018-04-06 11:52:16 +03:00
bobtwinkles
0801bd1d0e
two-phase borrows: support multiple activations in one statement
...
The need for this has arisen since the introduction of two-phase borrows on
method autorefs.
Fixes 49635
Fixes 49662
2018-04-04 23:08:10 -04:00
Ariel Ben-Yehuda
8f9ec1cb06
avoid IdxSets containing garbage above the universe length
...
This makes sure that all bits in each IdxSet between the universe length
and the end of the word are all zero instead of being in an indeterminate state.
This fixes a crash with RUST_LOG=rustc_mir, and is probably a good idea
anyway.
2018-04-02 00:14:44 +03:00
bors
ab0ef145ac
Auto merge of #48482 - davidtwco:issue-47184, r=nikomatsakis
...
NLL should identify and respect the lifetime annotations that the user wrote
Part of #47184 .
r? @nikomatsakis
2018-03-24 02:08:22 +00:00
David Wood
17b285d203
Added UserAssertTy statement.
2018-03-22 21:10:59 +00:00
Simon Sapin
67f46ce112
Use num::NonZero* instead of NonZero<_> in rustc and tests
2018-03-17 23:07:40 +01:00
kennytm
b5f102c7ae
Rollup merge of #48840 - varkor:idxset-cleanup, r=pnkfelix
...
Remove some unnecessary IdxSet methods
This replaces `IdxSet:: reset_to_empty` with `IdxSet:: clear`, and `IdxSet::elems`/`IdxSet::each_bit` with `IdxSet::iter`. Based on some [comments on #rustc](https://botbot.me/mozilla/rustc/2018-01-23/?msg=96063396 ).
r? @pnkfelix
2018-03-15 00:15:46 +08:00
bobtwinkles
9a5d61a840
Remove some commented out code
...
Left over from prior experimentation, no longer required.
2018-03-09 19:02:22 -05:00
bobtwinkles
2ed0f516dd
Check for two_phase_borrows in the right place
...
Fix a small compilation issue after I missed a critical change after rebasing
yesterday (ref c933440)
2018-03-09 13:54:26 -05:00
bobtwinkles
03f198fcee
Fix tests after two-phase borrow rewrite
2018-03-09 13:54:26 -05:00
bobtwinkles
e4e377f6e8
Remove unused field on BorrowData
2018-03-09 13:53:35 -05:00
bobtwinkles
47d75afd11
Complete re-implementation of 2-phase borrows
...
See #48431 for discussion as to why this was necessary and what we hoped to
accomplish. A brief summary:
- the first implementation of 2-phase borrows was hard to limit in the way we
wanted. That is, it was too good at accepting all 2-phase borrows rather than
just autorefs =)
- Numerous diagnostic regressions were introduced by 2-phase borrow support
which were difficult to fix
2018-03-09 13:53:35 -05:00
bobtwinkles
047bec69b9
mir dataflow: change graphviz output
...
The new output format is perhaps a little more readable. As a bonus, we get
labels on the outgoing edges to more easily corroborate the dataflow with the
plain MIR graphviz output.
2018-03-09 13:53:35 -05:00
bobtwinkles
138365368a
Finally start down the right path
2018-03-09 13:53:35 -05:00
bobtwinkles
580467d306
Rename BorrowData::location to BorrowData::reserve_location
...
in preparation for rewritting two phase borrow support
2018-03-09 13:51:39 -05:00
Oliver Schneider
b33e4e784e
Fully use miri in trans
2018-03-08 08:34:05 +01:00
varkor
f69a0999e7
Remove IdxSet::elems
2018-03-06 01:14:38 +00:00
varkor
89d12478ac
Remove IdxSet::each_bit
2018-03-06 01:14:36 +00:00
varkor
6701d9020f
Remove IdxSet::reset_to_empty
2018-03-06 00:58:01 +00:00
Manish Goregaokar
8d730ed527
Run Rustfix on librustc_mir
2018-03-02 21:02:37 -08:00
John Kåre Alsaker
b74e97cf42
Replace Rc with Lrc for shared data
2018-03-02 10:48:52 +01:00
Manish Goregaokar
8fdad6f2ef
Rollup merge of #48232 - fpoli:master, r=pnkfelix
...
mir: Gather move at SwitchInt, Assert terminators
Previously, `_1` was not marked as "definitely uninitialized" after a `switchInt(move _1)` terminator.
I think the same goes for the `assert` terminator.
Related discussion: https://internals.rust-lang.org/t/why-is-2-definitely-initialized-after-switchint-move-2/6760
2018-02-24 12:47:59 -08:00