Move 'doesn't live long enough' errors to labels
This patch moves the "doesn't live long enough" region-style errors to instead use labels.
An example follows.
Before:
```
error: `x` does not live long enough
--> src/test/compile-fail/send-is-not-static-ensures-scoping.rs:26:18
|
26 | let y = &x;
| ^
|
note: reference must be valid for the block at 23:10...
--> src/test/compile-fail/send-is-not-static-ensures-scoping.rs:23:11
|
23 | fn main() {
| ^
note: ...but borrowed value is only valid for the block suffix following statement 0 at 25:18
--> src/test/compile-fail/send-is-not-static-ensures-scoping.rs:25:19
|
25 | let x = 1;
| ^
```
After:
```
error: `x` does not live long enough
--> src/test/compile-fail/send-is-not-static-ensures-scoping.rs:26:18
|
26 | let y = &x;
| ^ does not live long enough
...
32 | };
| - borrowed value only valid until here
...
35 | }
| - borrowed value must be valid until here
```
r? @nikomatsakis
Fix the invalidation of the MIR early exit cache
~~The #34307 introduced a cache for early exits in order to help with O(n*m) explosion of cleanup blocks but the cache is invalidated incorrectly and I can’t seem to figure out why (caching is hard!)~~
~~Remove the cache for now to fix the immediate correctness issue and worry about the performance later.~~
Cache invalidation got fixed.
Fixes#35737
r? @nikomatsakis
Update LLVM to include 4 backported commits by @majnemer.
Partial fix for rust-lang/rust#35662, should help at least loops on small arrays.
Nominated for backporting into the new beta (not the one that's being released as stable this week).
r? @alexcrichton
add mips-uclibc targets
These targets cover OpenWRT 15.05 devices, which use the soft float ABI
and the uclibc library. None of the other built-in mips targets covered
those devices (mips-gnu is hard float and glibc-based, mips-musl is
musl-based).
With this commit one can now build std for these devices using these
commands:
```
$ configure --enable-rustbuild --target=mips-unknown-linux-uclibc
$ make
```
cc #35673
---
r? @alexcrichton
cc @felixalias This is the target the rust-tessel project should be using.
Note that the libc crate doesn't support the uclibc library and will have to be updated. We are lucky that uclibc and glibc are somewhat similar and one can build std and even run the libc-test test suite with the current, unmodified libc. About that last part, I tried to run the libc-test and got a bunch of compile errors. I don't intend to fix them but I'll post some instruction about how to run libc-test in the rust-lang/libc issue tracker.
Replace macro backtraces with labeled local uses
This PR (which builds on https://github.com/rust-lang/rust/pull/35688) follows from the conversations on how best to [handle the macro backtraces](https://internals.rust-lang.org/t/improving-macro-errors/3809). The feeling there was that there were two different "groups" of users.
The first group, the macro users, rarely (and likely never) want to see the macro backtrace. This is often more confusing to users as it will be talking about code they didn't write.
The second group, the macro writers, are trying to debug a macro. They'll want to see something of the backtrace so that they can see where it's going wrong and what the steps were to get there.
For the first group, it seems clear that we don't want to show *any* macro backtrace. For the second group, we want to show enough to help the macro writer.
This PR uses a heuristic. It will only show any backtrace steps if they are in the same crate that is being compiled. This keeps errors in foreign crates from showing to users that didn't need them.
Additionally, in asking around I repeated heard that the middle steps of the backtrace are rarely, if ever, used in practice. This PR takes and applies this knowledge. Now, instead of a full backtrace, the user is given the error underline inside of a local macro as well as the use site as a secondary label. This effectively means seeing the root of the error and the top of the backtrace, eliding the middle steps.
Rather than being the "perfect solution", this PR opts to take an incremental step towards a better experience. Likely it would help to have additional macro debugging tools, as they could be much more verbose than we'd likely want to use in the error messages themselves.
Some examples follow.
**Example 1**
Before:
<img width="1275" alt="screen shot 2016-08-15 at 4 13 18 pm" src="https://cloud.githubusercontent.com/assets/547158/17682828/3948cea2-6303-11e6-93b4-b567e9d62848.png">
After:
<img width="596" alt="screen shot 2016-08-15 at 4 13 03 pm" src="https://cloud.githubusercontent.com/assets/547158/17682832/3d670d8c-6303-11e6-9bdc-f30a30bf11ac.png">
**Example 2**
Before:
<img width="918" alt="screen shot 2016-08-15 at 4 14 35 pm" src="https://cloud.githubusercontent.com/assets/547158/17682870/722225de-6303-11e6-9175-336a3f7ce308.png">
After:
<img width="483" alt="screen shot 2016-08-15 at 4 15 01 pm" src="https://cloud.githubusercontent.com/assets/547158/17682872/7582cf6c-6303-11e6-9235-f67960f6bd4c.png">
1.11 changelog
[Rendered](9863afe029/RELEASES.md)
r? @steveklabnik
It's too late to get this into the actual release, but still needs to be backported to 1.12 beta.
accumulate into vector and assert, instead of printing
I'm only making this change in one place so that people can express
their preferences for this stylistic change. If/when this change is
approved I'll go ahead and translate the rest of the `std::ops`
examples.