2690 Commits

Author SHA1 Message Date
bors
d06fa3a46f Auto merge of #53383 - nnethercote:HybridIdxSetBuf, r=nikomatsakis
Speed up NLL with HybridIdxSetBuf.

It's a sparse-when-small but dense-when-large index set that is very
efficient for sets that (a) have few elements, (b) have large
universe_size values, and (c) are cleared frequently. Which makes it
perfect for the `gen_set` and `kill_set` sets used by the new borrow
checker.

This patch reduces `tuple-stress`'s NLL-check time by 40%, and up to 12%
for several other benchmarks. And it halves the max-rss for `keccak`,
and has smaller wins for `inflate` and `clap-rs`.
2018-08-17 07:20:23 +00:00
Nicholas Nethercote
5745597e61 Speed up NLL with HybridIdxSetBuf.
`HybridIdxSetBuf` is a sparse-when-small but dense-when-large index set
that is very efficient for sets that (a) have few elements, (b) have
large `universe_size` values, and (c) are cleared frequently. Which
makes it perfect for the `gen_set` and `kill_set` sets used by the new
borrow checker.

This patch reduces the execution time of the five slowest NLL benchmarks
by 55%, 21%, 16%, 10% and 9%. It also reduces the max-rss of three
benchmarks by 53%, 33%, and 9%.
2018-08-16 17:52:36 +10:00
ashtneoi
671d7e064f Change a method name and clarify a comment 2018-08-15 15:14:21 -07:00
ashtneoi
3c3a7bad49 Allocate fewer Strings at a time 2018-08-15 15:14:21 -07:00
ashtneoi
d6dbdee739 Remove incorrect space 2018-08-15 15:14:21 -07:00
ashtneoi
a583aa642e Remove unnecessary comment
Turns out I didn't read the original comment correctly and had some
confusion about how MIR uses temporaries.
2018-08-15 15:14:21 -07:00
ashtneoi
6cf4e14ac0 Coalesce var-is-not-Copy notes per move 2018-08-15 15:14:21 -07:00
ashtneoi
20ae08bda6 Dedup suggestions 2018-08-15 15:14:21 -07:00
ashtneoi
10aaba8dbe Make move errors more consistent with typeck errors 2018-08-15 15:14:21 -07:00
ashtneoi
701c74e067 Make move error suggestions clearer 2018-08-15 15:14:21 -07:00
ashtneoi
b05e9a7f77 Add backquotes around variable name 2018-08-15 15:14:21 -07:00
ashtneoi
8080bdf275 Fix move errors for index expressions
The suggestion logic gave up too early, which kept it from suggesting
borrowing index expressions.
2018-08-15 15:14:21 -07:00
ashtneoi
1e87908c52 Accept whitespace between & and mut 2018-08-15 15:14:21 -07:00
ashtneoi
a05f82fd2d Suggest match ergonomics, not ref/ref mut 2018-08-15 15:14:21 -07:00
ashtneoi
7b10133297 Fix some random stuff 2018-08-15 15:10:43 -07:00
David Wood
5532e9dec5
Improved how upvars are detected when presenting errors using prefixes. 2018-08-14 18:38:57 +02:00
David Wood
2c6b0e5cf7
Label definition of captured variables in errors. 2018-08-14 17:36:03 +02:00
David Wood
51b0552bd7
Added some debug logging. 2018-08-14 17:36:00 +02:00
Guillaume Gomez
3e9a1a1b82
Rollup merge of #53230 - memoryruins:nll_bootstrap_4, r=nikomatsakis
[nll] enable feature(nll) on various crates for bootstrap: part 4

#53172

r? @nikomatsakis
2018-08-12 23:26:56 +02:00
bors
0aa8d03202 Auto merge of #53177 - nikomatsakis:nll-redundant-borrows-and-escaping-values, r=pnkfelix
optimize redundant borrows and escaping paths in NLL

This builds on https://github.com/rust-lang/rust/pull/53168 and adds a commit that addresses https://github.com/rust-lang/rust/issues/53176 -- or at least I think it does. I marked this as WIP because I want to see the test results (and measure the performance). I also want to double check we're not adding in any unsoundness here.
2018-08-10 19:18:22 +00:00
memoryruins
5d6ca8e4c5 [nll] librustc_mir: enable feature(nll) for bootstrap 2018-08-10 06:27:35 -04:00
Niko Matsakis
ff7f6d57de don't walk MIR if no local variables need liveness
This is true for tuple-stress and html5ever
2018-08-10 04:17:46 -04:00
bors
a77dfcc79f Auto merge of #53131 - davidtwco:issue-52663-thread-local-static, r=nikomatsakis
NLL says something "does not live long enough" when talking about a (thread-local) static

Part of #52663.

r? @nikomatsakis
2018-08-10 06:54:11 +00:00
bors
f6d43ed842 Auto merge of #53124 - davidtwco:issue-52742, r=nikomatsakis
region error messages involving impls are confusing

Part of #52742.

r? @nikomatsakis
2018-08-10 02:18:21 +00:00
kennytm
c6f55bca7f
Rollup merge of #52773 - ljedrz:unncecessary_patterns, r=nikomatsakis
Avoid unnecessary pattern matching against Option and Result
2018-08-09 16:58:39 +08:00
David Wood
255ead5faa
Fallback to 'has type' error messages rather than 'lifetime appears in type'. 2018-08-09 10:25:26 +02:00
David Wood
82b48277a2
Correctly identify named early bound regions. 2018-08-09 10:25:23 +02:00
bors
80caa7f9f4 Auto merge of #53186 - mikhail-m1:master, r=nikomatsakis
Fixes #53119.

Fixes #53119.

I minimized sample little bit more, but I checked the sample from issue too.
r? @nikomatsakis
2018-08-08 23:30:12 +00:00
bors
62e4e08f4c Auto merge of #53163 - oli-obk:const_prop_ice, r=nikomatsakis
Remove an overly pedantic and wrong assertion

fixes #53157
fixes #53087
2018-08-08 20:16:25 +00:00
Niko Matsakis
e5f32effa9
add comment 2018-08-08 14:36:40 -04:00
bors
63fe441db8 Auto merge of #53088 - matthewjasper:closure-region-spans, r=nikomatsakis
[NLL] Use span of the closure args in free region errors

Also adds a note when one of the free regions is BrEnv.
In a future PR I'll change these messages to say "return requires", which should improve them a bit more.

r? @nikomatsakis
2018-08-08 12:48:32 +00:00
Niko Matsakis
1bae4f5aec optimize redundant borrows 2018-08-08 04:51:50 -04:00
Mikhail Modin
ffe336d07b Fixes #53119. 2018-08-08 08:02:47 +01:00
bors
26d7b64237 Auto merge of #52993 - alexcrichton:fix-some-vis, r=michaelwoerister
rustc: Tweak visibility of some lang items

This commit tweaks the linker-level visibility of some lang items that rustc
uses and defines. Notably this means that `#[panic_implementation]` and
`#[alloc_error_handler]` functions are never marked as `internal`. It's up to
the linker to eliminate these, not rustc.

Additionally `#[global_allocator]` generated symbols are no longer forced to
`Default` visibility (fully exported), but rather they're relaxed to `Hidden`
visibility). This symbols are *not* needed across DLL boundaries, only as a
local implementation detail of the compiler-injected allocator symbols, so
`Hidden` should suffice.

Closes #51342
Closes #52795
2018-08-08 01:24:15 +00:00
Niko Matsakis
3b7989d1df avoid computing liveness when a variable doesn't need it
In particular, we skip computing liveness for a variable X if all the
regions in its type are known to outlive free regions.
2018-08-07 15:05:16 -04:00
Niko Matsakis
887296e8c3 make it possible to customize the RegionGraph direction 2018-08-07 14:52:59 -04:00
Niko Matsakis
a92bf8dd29 liveness_map: rustfmt 2018-08-07 14:52:59 -04:00
Niko Matsakis
d1ce8e846b move liveness_map into the liveness module 2018-08-07 14:52:59 -04:00
Niko Matsakis
5147d383d3 promote liveness to a directory module 2018-08-07 14:52:59 -04:00
Niko Matsakis
db7a07cfc6 update comment to more accurately describe the limitations 2018-08-07 14:52:59 -04:00
Niko Matsakis
fb1702f301 compute liveness later 2018-08-07 14:52:59 -04:00
Oliver Schneider
afcbc2e90f Remove an overly pedantic and wrong assertion 2018-08-07 18:37:50 +02:00
bors
ccb550fb45 Auto merge of #53109 - nikomatsakis:nll-escaping-into-return-revert, r=nikomatsakis
revert #52991

Reverts https://github.com/rust-lang/rust/pull/52991 which is flawed. I have an idea how to fix it but might as well revert first since it is so wildly flawed. That's what I get for opening PRs while on PTO =)

r? @pnkfelix
2018-08-07 16:01:27 +00:00
Alex Crichton
7c58ab671f rustc: Tweak visibility of some lang items
This commit tweaks the linker-level visibility of some lang items that rustc
uses and defines. Notably this means that `#[panic_implementation]` and
`#[alloc_error_handler]` functions are never marked as `internal`. It's up to
the linker to eliminate these, not rustc.

Additionally `#[global_allocator]` generated symbols are no longer forced to
`Default` visibility (fully exported), but rather they're relaxed to `Hidden`
visibility). This symbols are *not* needed across DLL boundaries, only as a
local implementation detail of the compiler-injected allocator symbols, so
`Hidden` should suffice.

Closes #51342
Closes #52795
2018-08-07 08:42:38 -07:00
Alex Crichton
38eeebdfed rustc: Refactor MonoItem linkage/visibility calculation
The previous iteration was a large `match` which was quite heavily indented,
making it slightly difficult to read and see what was going on. This iteration
is a refactoring (no functional change intended) to make it a bit easier on the
eyes and a bit easier to modify over time.
2018-08-07 07:12:23 -07:00
bors
39e9516532 Auto merge of #51990 - oli-obk:unstable_union, r=nikomatsakis
Place unions, pointer casts and pointer derefs behind extra feature gates

To ensure we don't stabilize these things together with const fn stabilization (or any other stabilization)

This PR moves union field accesses inside `const fn` behind a feature gate. It was possible without a feature gate before, but since `const fn` was behind a feature gate we can do this change.

While "dereferencing raw pointers" and "casting raw pointers to usize" were hard errors before this PR, one could work around them by abusing unions:

```rust
// deref
union Foo<T> {
    x: &'static T,
    y: *const T,
}
const FOO: u32 = unsafe { *Foo { y: 42 as *const T }.x };

// as usize cast
union Bar<T> {
    x: usize,
    y: *const T,
}
const BAR: usize = unsafe { Bar { y: &1u8 }.x };
```

r? @eddyb

cc @nikomatsakis
2018-08-07 13:14:37 +00:00
Oliver Schneider
a091a6567c Make sure the feature gate actually works and never allows promoting these operations 2018-08-07 14:41:33 +02:00
Oliver Schneider
36907fc18d Also put comparing raw pointers behind a feature gate 2018-08-07 14:41:33 +02:00
Oliver Schneider
07e2dd7d96 Don't accidentally promote union access in MIR 2018-08-07 14:41:33 +02:00
Oliver Schneider
c0aedc0b6a Use the correct feature gate name 2018-08-07 14:41:33 +02:00