Commit graph

4160 commits

Author SHA1 Message Date
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
Niko Matsakis
c244fd79f2 kill old-style-lub warnings 2018-10-31 12:11:02 -04:00
Levente Kurusa
46b9461c4b
Add a test for multiple cases of E0669
Signed-off-by: Levente Kurusa <lkurusa@acm.org>
2018-10-30 22:09:56 +01:00
Cameron Hart
d22ae75c9d Fix feature gate only being checked on first repr attr. 2018-10-31 03:28:06 +11:00
kennytm
93f84e5586
Rollup merge of #55494 - pnkfelix:issue-55492-borrowck-migrate-must-look-at-parents-of-closures, r=davidtwco
borrowck=migrate must look at parents of closures

This fixes the NLL migration mode (which is the default with edition=2018) to inspect all parents of a closure in addition to the closure itself when looking to see if AST-borrowck issues an error for the given code.

This should be a candidate for beta backport.

Fix #55492
2018-10-30 18:55:37 +08:00
kennytm
3176239d34
Rollup merge of #55474 - oli-obk:const_eval_promoted, r=RalfJung
Fix validation false positive

Fixes #55454

r? @RalfJung
2018-10-30 18:55:32 +08:00
kennytm
64417a70fc
Rollup merge of #55459 - memoryruins:issue-49296, r=oli-obk
Add UI test for #49296

Closes #49296

r? @oli-obk
2018-10-30 18:55:28 +08:00
kennytm
df511e94a0
Rollup merge of #54885 - llogiq:fix-54704, r=nikomatsakis
Don't lint 'unused_parens` on `if (break _) { .. }`

This fixes #54704
2018-10-30 18:55:25 +08:00
Felix S. Klock II
87ce5ec6e9 Update compare-mode=nll stderr files to reflect the fix to #55492. 2018-10-30 00:37:38 +01:00
Felix S. Klock II
d5798c9554 Regression test for issue 55492. 2018-10-30 00:25:09 +01:00
Vadim Petrochenkov
dd68685e48 resolve: Fix ICE in macro import error recovery 2018-10-30 00:21:39 +03:00
Matthew Jasper
42a541e0f1 Don't emit cannot move errors twice in migrate mode 2018-10-29 20:22:01 +00:00
Esteban Küber
54858d5a67 Fix regression 2018-10-29 09:39:58 -07:00
Oliver Scherer
3ad154f484 Fix wrong validation clasisfication of Option<&T>::Some values 2018-10-29 15:22:47 +01:00
Oliver Scherer
e70b63458a Turn ICE for dangling pointers into error 2018-10-29 13:14:17 +01:00
Andre Bogus
1a37575ade don't lint unused_parens on if (break _) 2018-10-29 12:41:56 +01:00
Pietro Albini
e5d9da76f2
Rollup merge of #55423 - zackmdavis:back_out_bogus_ok_wrapping_suggestion, r=estebank
back out bogus `Ok`-wrapping suggestion on `?` arm type mismatch

This suggestion was introduced in #51938 / 6cc78bf8d7 (while introducing different language for type errors coming from `?` rather than a `match`), but it has a lot of false-positives, and incorrect suggestions carry more badness than marginal good suggestions do goodness. I regret not doing this earlier. 😞

Resolves #52537, resolves #54578.

r? @estebank
2018-10-29 09:47:46 +01:00