Commit graph

3776 commits

Author SHA1 Message Date
Felix S. Klock II
fe29cd0a3d Add ui/borrowck/borrowck-closures-mut-of-mut.rs.
This is a variant of `ui/borrowck/borrowck-closures-mut-of-imm.rs`
that I used to help identify what changes I needed to make to the
latter file in order to recover its instances of E0524 under NLL.

(Basically this test includes the changes you'd need to make to
`ui/borrowck/borrowck-closures-mut-of-imm.rs` in order to get rid of
occurrences of E0596. And then I realized that one needs to add
invocations of the closures in order to properly extend the mutable
reborrows in a manner such that NLL will roughly match AST-borrowck.)
2018-11-05 15:26:02 +01:00
Felix S. Klock II
f7ded5dcb6 Removed overlapping_spans.{rs,stderr,nll.stderr}.
This is based on the feedback from estebank:

"""
I believe that test can be removed outright. It'd be impossible for a
new change to go through that breaks this kind of output without it
being picked up by multiple other `stderr` tests. This is an artifact
of the transition period to the "new" output style.
"""

see: https://github.com/rust-lang/rust/issues/52663#issuecomment-422155551
2018-11-05 15:26:02 +01:00
Felix S. Klock II
e940801592 Make ui/binop-move-semantics.rs robust w.r.t. NLL. 2018-11-05 15:26:02 +01:00
Felix S. Klock II
62a2bb1294 Remove println!'s from ui/issues/issue-52126-assign-op-invariance.rs
This is not strictly necessary to make this test "more robust with
respect to NLL"; its just an attempt to narrow the scope of the test
and focus on its core.
2018-11-05 15:26:02 +01:00
Felix S. Klock II
41a1ee923e Make ui/unop-move-semantics.rs robust w.r.t. NLL. 2018-11-05 15:26:02 +01:00
Felix S. Klock II
9843a38632 Make ui/borrowck/borrowck-unboxed-closures.rs robust w.r.t. NLL. 2018-11-05 15:26:02 +01:00
Felix S. Klock II
6c7d82e1ca Make ui/borrowck/borrowck-reborrow-from-mut.rs robust w.r.t. NLL. 2018-11-05 15:26:02 +01:00
Felix S. Klock II
9f9bf94b8d Make ui/borrowck/borrowck-overloaded-index-move-index.rs robust w.r.t. NLL. 2018-11-05 15:26:02 +01:00
Felix S. Klock II
affddf68c6 Make ui/issues/issue-17263.rs robust w.r.t. NLL. 2018-11-05 15:26:02 +01:00
Felix S. Klock II
cd52b3c2dc Make ui/span/borrowck-borrow-overloaded-auto-deref-mut.rs robust w.r.t. NLL. 2018-11-05 15:26:02 +01:00
Felix S. Klock II
5f524ed5c4 Switch to using revisions in borrowck-lend-flow-loop.rs
Most of the time we want to robustify tests, but in this case this
test is deliberately encoding artifacts of AST-borrowck.  So instead
of adding artificial uses that would obscure the aspects of
AST-borrowck that are being tests, we instead use revisions and then
mark the cases that apply to NLL as well as AST-borrowck.
2018-11-05 15:26:02 +01:00
jsirs
87c22f2b14
add test for i32, fix incorrect location 2018-11-05 15:57:07 +02:00
jsirs
9fb2e0618e
update test to include concrete type (i32) 2018-11-05 15:54:10 +02:00
jsirs
2a1dc1eff6
Add test
Add test for incompleately implemented add trait, see issue #31076
2018-11-05 14:33:43 +02:00
Ralf Jung
996a42557e the visitor can already load the value for visit_primitive 2018-11-05 09:40:05 +01:00
Ralf Jung
77c283465c Also test for undef in enum discriminant
The error message is sub-par, but fixing that requries moving ScalarMaybeUndef
to librustc which would conflict badly with another PR that is in flight.
2018-11-05 09:17:48 +01:00
Ralf Jung
fa01e04fbb fix validation error on non-integer enum discriminants 2018-11-05 09:17:48 +01:00
Ralf Jung
7d7bd9b6c2 reduce the amount of traversal/projection code that the visitor has to implement itself 2018-11-05 09:17:48 +01:00
bors
248745ab0c Auto merge of #55569 - durka:must-use-external-macro, r=alexcrichton
enforce unused-must-use lint in macros

Fixes #55516 by turning on the UNUSED_MUST_USE lint within macros.
2018-11-04 22:56:23 +00:00
Nikita Popov
131fda40af Ignore some more tests on emscripten
Either missing i128 or asm support
2018-11-04 18:50:57 +01:00
David Wood
ba09ed5208
Update test to force error under NLL.
In each of the three cases in this test, there is a mutable borrow
of some field of the union and then a shared borrow of some other field
immediately following.

Under NLL, the mutable borrow is killed straight away as it isn't
used later - therefore not causing a conflict with the shared borrow.
This commit adds a use of the first mutable borrow to force the intended
errors to appear under NLL.
2018-11-04 18:36:30 +01:00
Ralf Jung
bb17f71749 also test with PhantomData 2018-11-04 14:43:05 +01:00
Ralf Jung
e753d21051 miri: accept extern types in structs if they are the only field 2018-11-04 11:23:34 +01:00
bors
86b88e6a85 Auto merge of #55432 - zackmdavis:single_life, r=nikomatsakis
single life

 * structured ~~autofixable~~ (well, pending #53934 and rust-lang-nursery/rustfix#141) suggestions for the single-use-lifetimes lint in the case of function and method reference args
 * don't consider the anonymous lifetime `'_` as "single-use" (it's intended for exactly this sort of thing)

![single_life](https://user-images.githubusercontent.com/1076988/47613227-3b2b6400-da48-11e8-8efd-cb975ddf537d.png)

r? @nikomatsakis
2018-11-04 09:45:49 +00:00
bors
794fc062be Auto merge of #55455 - estebank:expected-descr, r=michaelwoerister
Use token description in "expected/found" parse messages

Fix #54309.
2018-11-04 06:56:11 +00:00
varkor
8277ba2d30 Make "all possible cases" help message uniform with existing help messages
Specifically no capitalisation or trailing full stops.
2018-11-03 23:53:10 +00:00
bors
a3f0f5107e Auto merge of #55101 - alexreg:trait-aliases, r=nikomatsakis
Implement trait aliases (RFC 1733)

Extends groundwork done in https://github.com/rust-lang/rust/pull/45047, and fully implements https://github.com/rust-lang/rfcs/pull/1733.

CC @durka @nikomatsakis
2018-11-03 17:30:37 +00:00
David Wood
a4e0945621
Unions reinitialized after assignment into field.
This commit makes two changes:

First, it updates the dataflow builder to add an init for the place
containing a union if there is an assignment into the field of
that union.

Second, it stops a "use of uninitialized" error occuring when there is an
assignment into the field of an uninitialized union that was previously
initialized. Making this assignment would re-initialize the union, as
tested in `src/test/ui/borrowck/borrowck-union-move-assign.nll.stderr`.
The check for previous initialization ensures that we do not start
supporting partial initialization yet (cc #21232, #54499, #54986).
2018-11-03 18:14:21 +01:00
Guillaume Gomez
c5c6e4239f
Rollup merge of #55567 - durka:derive-debug-uninhabited, r=nikomatsakis
add test for deriving Debug on uninhabited enum

Adds a test to close #38885.
2018-11-03 13:40:35 +01:00
Alexander Regueiro
c04559fe9e Added WF checking for trait alias definitions. 2018-11-03 04:09:35 +00:00
Alexander Regueiro
4bdc3d833a Extended elaboration for trait aliases to include arbitrary bounds. 2018-11-03 04:09:34 +00:00
Alexander Regueiro
a8fcfcef30 Add more tests. 2018-11-03 04:09:34 +00:00
Alexander Regueiro
4751953d5f Added tests. 2018-11-03 04:09:34 +00:00
bors
3fc70e8d46 Auto merge of #54383 - mikeyhew:custom-receivers-object-safety, r=nikomatsakis
Take 2: Implement object-safety and dynamic dispatch for arbitrary_self_types

This replaces #50173. Over the months that that PR was open, we made a lot of changes to the way this was going to be implemented, and the long, meandering comment thread and commit history would have been confusing to people reading it in the future. So I decided to package everything up with new, straighforward commits and open a new PR.

Here are the main points. Please read the commit messages for details.

- To simplify codegen, we only support receivers that have the ABI of a pointer. That means they are builtin pointer types, or newtypes thereof.
- We introduce a new trait: `DispatchFromDyn<T>`, similar to `CoerceUnsized<T>`. `DispatchFromDyn` has extra requirements that `CoerceUnsized` does not: when you implement `DispatchFromDyn` for a struct, there cannot be any extra fields besides the field being coerced and `PhantomData` fields. This ensures that the struct's ABI is the same as a pointer.
- For a method's receiver (e.g. `self: Rc<Self>`) to be object-safe, it needs to have the following property:
    - let `DynReceiver` be the receiver when `Self = dyn Trait`
    - let `ConcreteReceiver` be the receiver when `Self = T`, where `T` is some unknown `Sized` type that implements `Trait`, and is the erased type of the trait object.
    - `ConcreteReceiver` must implement `DispatchFromDyn<DynReceiver>`

In the case of `Rc<Self>`, this requires `Rc<T>: DispatchFromDyn<Rc<dyn Trait>>`

These rules are explained more thoroughly in the doc comment on `receiver_is_dispatchable` in object_safety.rs.

r? @nikomatsakis and @eddyb

cc @arielb1 @cramertj @withoutboats

Special thanks to @nikomatsakis for getting me un-stuck when implementing the object-safety checks, and @eddyb for helping with the codegen parts.

EDIT 2018-11-01: updated because CoerceSized has been replaced with DispatchFromDyn
2018-11-03 02:37:29 +00:00
Felix S. Klock II
cc33aecb68 Regression test for issue 55608. 2018-11-03 02:32:43 +01:00
Felix S. Klock II
1bbaa55341 Regression test for issue 55552. 2018-11-03 02:03:04 +01:00
Vadim Petrochenkov
9ed9d6d0d0 resolve: Filter away macro prelude in modules with #[no_implicit_prelude] on 2018 edition 2018-11-03 00:07:56 +03:00
bors
8b096314a6 Auto merge of #55087 - levex:e0669-improve-span, r=nagisa
rustc: improve E0669 span

E0669 refers to an operand that cannot be coerced into a single LLVM
value, unfortunately right now this uses the Span for the entire inline
assembly statement, which is less than ideal.

This commit preserves the Span from HIR, which lets us emit the error
using the Span for the operand itself in MIR.

r? @nagisa
cc/ @parched
2018-11-02 18:28:51 +00:00
Alex Burka
2279f6260c add test for deriving Debug on uninhabited enum 2018-11-02 02:26:50 +00:00
bors
5eda136f62 Auto merge of #55305 - nikomatsakis:universes-refactor-3, r=scalexm
universes refactor 3

Some more refactorings from my universe branch. These are getting a bit more "invasive" -- they start to plumb the universe information through the canonicalization process. As of yet though I don't **believe** this branch changes our behavior in any notable way, though I'm marking the branch as `WIP` to give myself a chance to verify this.

r? @scalexm
2018-11-02 01:19:17 +00:00
Vadim Petrochenkov
29d2ceae7c Remove deprecated unstable #[panic_implementation]
It was superseded by `#[panic_handler]`
2018-11-02 02:22:30 +03:00
Vadim Petrochenkov
89cf577c73 Fix tracking issue numbers for some unstable features 2018-11-02 02:21:55 +03:00
Michael Hewson
a468da9cfb Add a check for reprs that could change the ABI
disallow `#[repr(C)] and `#[repr(packed)]` on structs implementing DispatchFromDyn because they will change the ABI from Scalar/ScalarPair to Aggregrate, resulting in an ICE during object-safety checks or codegen
2018-11-01 18:16:59 -04:00
Michael Hewson
b5b25f8196 Put backticks around field names, types and paths in error messages
Added to `DispatchFromDyn` and `CoerceUnsized` error messages
2018-11-01 18:16:59 -04:00
Michael Hewson
74ef46cfa2 Replace UncoeribleReceiver error message with UndispatchableReceiver 2018-11-01 18:16:59 -04:00
Michael Hewson
f12c250e40 Replace CoerceSized trait with DispatchFromDyn
Rename `CoerceSized` to `DispatchFromDyn`, and reverse the direction so that, for example, you write

```
impl<T: Unsize<U>, U> DispatchFromDyn<*const U> for *const T {}
```

instead of

```
impl<T: Unsize<U>, U> DispatchFromDyn<*const T> for *const U {}
```

this way the trait is really just a subset of `CoerceUnsized`.

The checks in object_safety.rs are updated for the new trait, and some documentation and method names in there are updated for the new trait name — e.g. `receiver_is_coercible` is now called `receiver_is_dispatchable`. Since the trait now works in the opposite direction, some code had to updated here for that too.

I did not update the error messages for invalid `CoerceSized` (now `DispatchFromDyn`) implementations, except to find/replace `CoerceSized` with `DispatchFromDyn`. Will ask for suggestions in the PR thread.
2018-11-01 18:16:59 -04:00
Michael Hewson
82f1f9a5b4 Add new tests and update existing for object-safe custom receivers 2018-11-01 18:16:22 -04:00
Michael Hewson
a0f23f8405 update tests that have changed output
I’m not sure why these tests have different output now, but they do.
In all cases, the error message that is missing looks like this: “the
trait bound `dyn Trait: Trait` is not satisfied”

My guess is that the error message is going away because object-safety
now involves trait solving, and these extra error messages are no
longer leaking out.
2018-11-01 18:16:22 -04:00
Alex Burka
9dd2c89066 enforce unused-must-use lint in macros 2018-11-01 03:32:45 +00:00
Samuel Holland
283f2be142 Fix double_check tests on big-endian targets
Since the enums get optimized down to 1 byte long, the bits
set in the usize member don't align with the enums on big-endian
machines. Avoid this issue by shrinking the integer member to the
same size as the enums.
2018-11-01 01:03:20 +00:00