Commit Graph

81044 Commits

Author SHA1 Message Date
bors
6fc21e5576 Auto merge of #51936 - japaric:rust-lld, r=alexcrichton
rename rustc's lld to rust-lld

to not shadow the system installed LLD when linking with LLD.

Before:

- `-C linker=lld -Z linker-flavor=ld.lld` uses rustc's LLD
- It's not possible to use a system installed LLD that's named `lld`

With this commit:

- `-C linker=rust-lld -Z linker-flavor=ld.lld` uses rustc's LLD
- `-C linker=lld -Z linker-flavor=ld.lld` uses the system installed LLD

we don't offer guarantees about the availability of LLD in the rustc sysroot so we can rename the tool as long as we don't break the wasm32-unknown-unknown target which depends on it.

r? @alexcrichton we discussed this before
2018-07-05 06:44:16 +00:00
Jorge Aparicio
31ed5c7a01 in the second copy lld is already named rust-lld 2018-07-04 23:10:10 -05:00
bors
c865d3934c Auto merge of #51938 - zackmdavis:and_the_case_of_the_leaking_desugar, r=estebank
in which we plug the crack where `?`-desugaring leaked into errors

Most of the time, it's not a problem that the types of the arm bodies in
a desugared-from-`?` match are different (that is, specifically: in `x?`
where x is a `Result<A, B>`, the `Ok` arm body is an `A`, whereas the
`Err` arm diverges to return a `Result<A, B>`), because they're being
assigned to different places. But in tail position, the types do need to
match, and our error message was explicitly referring to "match arms",
which is confusing when there's no `match` in the sweetly sugared
source.

It is not without some misgivings that we pollute the clarity-of-purpose
of `note_error_origin` with the suggestion to wrap with `Ok` (the other
branches are pointing out the odd-arm-out in the HIR that is the origin
of the error; the new branch that issues the `Ok` suggestion is serving
a different purpose), but it's the natural place to do it given that
we're already matching on `ObligationCauseCode::MatchExpressionArm {
arm_span, source }` there.

Resolves #51632.
2018-07-05 02:35:25 +00:00
Santiago Pastorino
0e31e2fa9b
Remove rustc_mir_borrowck attribute and use rustc_mir instead 2018-07-04 23:10:28 -03:00
csmoe
37228fe632 reverse_postorder 2018-07-05 09:46:10 +08:00
Benjamin Peterson
70a6aeac0d Remove obsolete documentation from FufillmentContext::select comment.
The `only_new_obligations` parameter has not existed since 43756934d2.
2018-07-04 18:25:04 -07:00
bors
b51ca20ce5 Auto merge of #51964 - matthewjasper:unused-mut-mir-generation, r=nikomatsakis
[NLL] Fix various unused mut errors

Closes #51801
Closes #50897
Closes #51830
Closes #51904
cc #51918 - keeping this one open in case there are any more issues

This PR contains multiple changes. List of changes with examples of what they fix:

* Change mir generation so that the parameter variable doesn't get a name when a `ref` pattern is used as an argument
```rust
fn f(ref y: i32) {} // doesn't trigger lint
```
* Change mir generation so that by-move closure captures don't get first moved into a temporary.
```rust
let mut x = 0; // doesn't trigger lint
move || {
    x = 1;
};
```
* Treat generator upvars the same as closure upvars
```rust
let mut x = 0; // This mut is now necessary and is not linted against.
move || {
    x = 1;
    yield;
};
```

r? @nikomatsakis
2018-07-05 00:22:14 +00:00
mark
6556c84e3f Add a link to the rustc docs 2018-07-04 17:24:43 -05:00
Dylan MacKenzie
cf5eaa75bb Move Eq + Hash + Clone bounds to Machine 2018-07-04 14:36:07 -07:00
Dylan MacKenzie
c395044a50 Shorten error message and add link to test
Implements @bjorn3's suggestions.
2018-07-04 14:36:07 -07:00
Dylan MacKenzie
0d0e021b1c Derive Eq and Hash for types used in Miri's evaluator 2018-07-04 14:36:07 -07:00
Dylan MacKenzie
b3b04b8cc6 Avoid overflow in step counter
This removes the `usize` argument to `inc_step_counter`. Now, the step
counter increments by exactly one for every terminator evaluated. After
`STEPS_UNTIL_DETECTOR_ENABLED` steps elapse, the detector is run every
`DETECTOR_SNAPSHOT_PERIOD` steps. The step counter is only kept modulo
this period.
2018-07-04 14:36:07 -07:00
Dylan MacKenzie
647ba29b90 Explain reason behind error span
We can't expand the span of the error reliably according to @oli-obk, so
just mention why it points to this particular expression.
2018-07-04 14:36:07 -07:00
Dylan MacKenzie
d36302da53 Add a UI test for #50637
This test relies on the fact that restrictions on expressions in `const
fn` do not apply when computing array lengths. It is more difficult to
statically analyze than the simple `loop{}` mentioned in #50637.

This test should be updated to ignore the warning after #49980 is resolved.
2018-07-04 14:36:07 -07:00
Dylan MacKenzie
10f217159b Rename bloom to hashes 2018-07-04 14:36:07 -07:00
Dylan MacKenzie
c6aea935cf Enable loop detector in step loop
The detector runs every `DETECTOR_SNAPSHOT_PERIOD` steps. Since the
number of steps can increase by more than 1 (I'd like to remove this),
the detector may fail if the step counter is incremented past the
scheduled detection point during the loop.
2018-07-04 14:36:07 -07:00
Dylan MacKenzie
f7e9d2ac3e Add an InfiniteLoop variant to EvalErrorKind 2018-07-04 14:36:07 -07:00
Dylan MacKenzie
0f1c61cb7f Improve correctness of Frame and Memory equality
Incorporate a subset of the suggestions from @oli-obk. More to come.
2018-07-04 14:36:07 -07:00
Dylan MacKenzie
788c5f3c8b Revert "Refactor EvalContext stack and heap into inner struct"
This reverts commit 59d21c526c036d7097d05edd6dffdad9c5b1cb62, and uses
tuple to store the mutable parts of an EvalContext (which now includes
`Machine`). This requires that `Machine` be `Clone`.
2018-07-04 14:36:07 -07:00
Dylan MacKenzie
7f9b01a0fc Add miri infinite loop detection
Use the approach suggested by @oli-obk, a table holding `EvalState`
hashes and a table holding full `EvalState` objects. When a hash
collision is observed, the state is cloned and put into the full
table. If the collision was not spurious, it will be detected during the
next iteration of the infinite loop.
2018-07-04 14:36:07 -07:00
Dylan MacKenzie
6c0f502fe6 Implement Clone, Eq and Hash for the heap and stack
I use a pattern binding in each custom impl, so that adding fields to
`Memory` or `Frame` will cause a compiler error instead of causing e.g.
`PartialEq` to become invalid. This may be too cute.

This adds several requirements to `Machine::MemoryData`. These can be
removed if we don't want this associated type to be part of the equality
of `Memory`.
2018-07-04 14:36:07 -07:00
Dylan MacKenzie
db025c14ec Refactor EvalContext stack and heap into inner struct
Change surrounding code to use accessor methods to refer to these fields.
Similar changes have not yet been made in tools/miri
2018-07-04 14:36:07 -07:00
David Wood
f90eada1c9
Improve comments. 2018-07-04 21:48:25 +01:00
David Wood
aeb1682894
Ensure that borrows wind up unactivated. 2018-07-04 21:35:38 +01:00
bors
afaa406465 Auto merge of #51803 - lucasem:rustdoc-code-hash-escape, r=GuillaumeGomez
rustdoc codeblock hash escape

So that docstring text such as the following (in a code block) can be created ergonomically:

```rust
let s = "
    foo
    # bar
    baz
";
```

Such code in a docstring hide the <code>&nbsp;&nbsp;&nbsp;&nbsp;# bar</code> line.

Previously, using two consecutive hashes <code>&nbsp;&nbsp;&nbsp;&nbsp;## bar</code> would turn the line into _shown_ `# bar`, losing the leading whitespace. A line of code like <code>&nbsp;&nbsp;&nbsp;&nbsp;# bar</code> (such as in the example above) **could not be represented** in the docstring text.

This commit makes the two consecutive hashes not also trim the leading whitespace — the two hashes simply **escape** into a single hash and do not hide the line, leaving the rest of that line unaffected. The new docstring text to achieve the above code block is:

```rust
/// ```
/// let s = "
///     foo
///     ## bar
///     baz
/// ";
/// ```
```
2018-07-04 20:21:01 +00:00
Kerollmops
6035534586
Implement Option::replace in the core library 2018-07-04 21:54:45 +02:00
David Wood
7eba13f451
Correctly handle an activation from dead code. 2018-07-04 20:08:15 +01:00
bors
4af9132a02 Auto merge of #51611 - QuietMisdreavus:slippery-macros, r=ollie27
rustdoc: import cross-crate macros alongside everything else

The thrilling conclusion of the cross-crate macro saga in rustdoc! After https://github.com/rust-lang/rust/pull/51425 made sure we saw all the namespaces of an import (and prevented us from losing the `vec!` macro in std's documentation), here is the PR to handle cross-crate macro re-exports at the same time as everything else. This way, attributes like `#[doc(hidden)]` and `#[doc(no_inline)]` can be used to control how the documentation for these macros is seen, rather than rustdoc inlining every macro every time.

Fixes https://github.com/rust-lang/rust/issues/50647
2018-07-04 18:15:14 +00:00
Lucas Morales
ff2ff2b2b8
rustdoc book on codeblock hash escaping 2018-07-04 12:41:45 -04:00
bors
0ad8f9e5b1 Auto merge of #51395 - SimonSapin:repr-transparent, r=SimonSapin
Add #[repr(transparent)] to some libcore types

* `UnsafeCell`
* `Cell`
* `NonZero*`
* `NonNull`
* `Unique`

CC https://github.com/rust-lang/rust/issues/43036
2018-07-04 16:21:42 +00:00
CrLF0710
30063ae2a5
Shorten the line
Shorten the line to make tidy happy.
2018-07-04 23:36:51 +08:00
Aaron Power
dab257f193
Update RELEASES.md 2018-07-04 15:56:18 +01:00
CrLF0710
1dae60ea4c
Include VS 2017 in error message.
Update error prompt message to indicate that VS 2017 is supported (for a while now).
2018-07-04 22:49:35 +08:00
bors
eded1aa14c Auto merge of #51870 - nnethercote:reuse-DefsUsesVisitor, r=nikomatsakis
Reuse the `DefsUsesVisitor` in `simulate_block()`.

This avoids a bunch of allocations for the bitsets within it,
speeding up a number of NLL benchmarks, the best by 1%.

r? @nikomatsakis
2018-07-04 14:12:14 +00:00
flip1995
c3949009ad
Improving span of unknown lint tool error message 2018-07-04 14:28:44 +02:00
bors
a22bcd8aab Auto merge of #51935 - cramertj:unpin-references, r=withoutboats
Unpin references

I also considered adding an impl for raw pointers as well, but that makes it easy to accidentally have unsound owning-collections that might otherwise be able to project pinned-ness (e.g. `Box`).

cc @RalfJung

r? @withoutboats
2018-07-04 11:32:40 +00:00
flip1995
a9634fcd01
Unstable book documentation of tool lints 2018-07-04 12:16:46 +02:00
flip1995
dddb8d2eba
Implementation of tool lints 2018-07-04 12:16:46 +02:00
flip1995
ed29e86c39
Tests for tool_lints 2018-07-04 12:16:45 +02:00
bors
8dd715ee5e Auto merge of #51895 - nikomatsakis:move-self-trait-predicate-to-items, r=scalexm
Move self trait predicate to items

This is a "reimagination" of @tmandry's PR #50183. The main effect is described in this comment from one of the commits:

---

Before we had the following results for `predicates_of`:

```rust
trait Foo { // predicates_of: Self: Foo
  fn bar(); // predicates_of: Self: Foo (inherited from trait)
}
```

Now we have removed the `Self: Foo` from the trait. However, we still
add it to the trait ITEM. This is because when people do things like
`<T as Foo>::bar()`, they still need to prove that `T: Foo`, and
having it in the `predicates_of` seems to be the cleanest way to
ensure that happens right now (otherwise, we'd need special case code
in various places):

```rust
trait Foo { // predicates_of: []
  fn bar(); // predicates_of: Self: Foo
}
```

However, we sometimes want to get the list of *just* the predicates
truly defined on a trait item (e.g., for chalk, but also for a few
other bits of code). For that, we define `predicates_defined_on`,
which does not contain the `Self: Foo` predicate yet, and we plumb
that through metadata and so forth.

---

I'm assigning @eddyb as the main reviewer, but I thought I might delegate to scalexm for this one in any case. I also want to post an alternative that I'll leave in the comments; it occurred to me as I was writing. =)

r? @eddyb
cc @scalexm @tmandry @leodasvacas
2018-07-04 09:33:33 +00:00
Niko Matsakis
727f01700b write code to extract region names and emit new style message 2018-07-04 05:09:33 -04:00
Rémy Rakic
0190286d48 NLL Liveness: Skip regionless types when visiting free regions
The tuple-stress benchmark exercises the liveness constraint generation code for types which do not have regions
2018-07-04 08:50:12 +02:00
Nicholas Nethercote
b0c78120e3 Reuse the DefsUsesVisitor in simulate_block().
This avoids a bunch of allocations for the bitsets within it,
speeding up a number of NLL benchmarks, the best by 1%.
2018-07-04 13:05:03 +10:00
Alex Crichton
ef41cf0288 Compile stage0 tools with the raw bootstrap compiler
This commit updates the stage0 build of tools to use the libraries of the stage0
compiler instead of the compiled libraries by the stage0 compiler. This should
enable us to avoid any stage0 hacks (like missing SIMD).
2018-07-03 18:06:29 -07:00
csmoe
c999b253b7 add span note 2018-07-04 09:01:11 +08:00
bors
a739c51d10 Auto merge of #51926 - matthewjasper:Initialization-span, r=nikomatsakis
[NLL] Use better span for initializing a variable twice

Closes #51217

When assigning to a (projection from a) local immutable local which starts initialised (everything except `let PATTERN;`):

* Point to the declaration of that local
* Make the error message refer to the local, rather than the projection.

r? @nikomatsakis
2018-07-03 23:54:25 +00:00
Niko Matsakis
fa02d68eec universal_regions: rustfmt 2018-07-03 18:10:08 -04:00
Niko Matsakis
8b3ce9ca68 always create a category, even it is just "boring" 2018-07-03 18:10:08 -04:00
Niko Matsakis
aae177e005 promote error-reporting to a module 2018-07-03 18:10:08 -04:00
Niko Matsakis
351e78de26 add assert_crate_local method to ClearCrossCrate 2018-07-03 18:10:08 -04:00