Commit Graph

85691 Commits

Author SHA1 Message Date
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
Guillaume Gomez
2b646059a1 Move doc_alias doc 2018-11-02 00:04:56 +01:00
Guillaume Gomez
7f7d8fbb2f Add test for index-page 2018-11-02 00:01:53 +01:00
Guillaume Gomez
1244a85729 Add documentation for index-page features 2018-11-02 00:01:53 +01:00
Michael Hewson
192e7c4b51 Add comments explaining how codegen works for dyn Trait methods 2018-11-01 18:28:52 -04:00
bors
d06210f88f Auto merge of #55595 - Manishearth:clippyup, r=oli-obk
Update clippy

r? @kennytm @oli-obk
2018-11-01 22:18:16 +00: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
3db22039dc Remove this check for object-safety during selection of trait object candidates
I don't really understand what it's for, but see the comment here:
https://github.com/rust-lang/rust/pull/50173#discussion_r204222336

where arielb1 said

> Does this check do anything these days? I think `$0: Trait` is always considered ambiguous

and nikomatsakis agreed we may be able to get rid of it
2018-11-01 18:16:59 -04:00
Michael Hewson
eb997d76d5 add U: Trait to the param env during DispatchFromDyn check
also updated the doc on `receiver_is_dispatchable` to reflect current state of the implementation
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
6f2a161b1b Add layout sanity checks in object safety
If object-safety checks succeed for a receiver type, make sure the
receiver’s abi is
a) a Scalar, when Self = ()
b) a ScalarPair, when Self = dyn Trait
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
3c56d8d0c2 fix error-index test 2018-11-01 18:16:59 -04:00
Michael Hewson
48d7f8db3a update DispatchFromDyn doctest 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
c29641e067 fix docs on trait
tests were failing because I didn't wrap code snippets like  in backticks. fixed that now, so hopefully tests will pass on travis
2018-11-01 18:16:22 -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
Michael Hewson
192900e7c2 Add CoerceSized impls throughout libstd
This will make receiver types like `Rc<Self>` and `Pin<&mut Self>`
object-safe.
2018-11-01 18:16:22 -04:00
Michael Hewson
9f59da2864 Implement object-safety for arbitrary_self_types: part 2
For now, all of the receivers that we care about are just a newtyped
pointer — i.e. `Box<Self>`, `Rc<Self>`, `Pin<Box<Self>>`, `Pin<&mut
Self>`. This is much simpler to implement in codeine than the more
general case, because the ABI is the same as a pointer. So we add some
checks in typeck/coherence/builtin.rs to make sure that implementors of
CoerceSized are just newtyped pointers. In this commit, we also
implement the codegen bits.
2018-11-01 18:15:20 -04:00
Michael Hewson
d5c2c4a433 Implement the object-safety checks for arbitrary_self_types: part 1
For a trait method to be considered object-safe, the receiver type must
satisfy certain properties: first, we need to be able to get the vtable
to so we can look up the method, and second, we need to convert the
receiver from the version where `Self=dyn Trait`, to the version where
`Self=T`, `T` being some unknown, `Sized` type that implements `Trait`.

To check that the receiver satisfies those properties, we use the
following query:

forall (U) {
if (Self: Unsize<U>) {
Receiver[Self => U]: CoerceSized<Receiver>
}
}

where `Receiver` is the receiver type of the method (e.g. `Rc<Self>`),
and `Receiver[Self => U]` is the receiver type where `Self = U`, e.g.
`Rc<U>`.

forall queries like this aren’t implemented in the trait system yet, so
for now we are using a bit of a hack — see the code for explanation.
2018-11-01 18:15:19 -04:00
Michael Hewson
be80a79a1e Add CoerceSized trait and lang item
This trait is more-or-less the reverse of CoerceUnsized, and will be
used for object-safety checks. Receiver types like `Rc` will have to
implement `CoerceSized` so that methods that use `Rc<Self>` as the
receiver will be considered object-safe.
2018-11-01 18:15:19 -04:00
Michael Hewson
a920036f4f move some code around to avoid query cycles 2018-11-01 18:15:19 -04:00
Michael Hewson
d14af130f6 Make all object-safety methods require a global TyCtxt 2018-11-01 18:15:19 -04:00
Nick Cameron
d0778ac88e publish-toolstate: ping maintainers when a tool builds again
And add @Xanewok as an RLS maintainer
2018-11-02 10:38:05 +13:00
Alex Crichton
ff5226cd2f std: Enable usage of thread_local! through imports
The `thread_local!` macro delegated to an internal macro but it didn't
do so in a macros-and-the-module-system compatible fashion, meaning if a
`#![no_std]` crate imported `std` and tried to use `thread_local!` it
would fail due to missing a lookup of an internal macro.

This commit switches the macro to instead use `$crate` to invoke other
macros, ensuring that it'll work when `thread_local!` is imported alone.
2018-11-01 14:17:39 -07:00
Manish Goregaokar
ecf27d3018 Update clippy 2018-11-01 13:58:07 -07:00
Nikita Popov
d794597698 Remove checks for LLVM < 4.0
While we still have to support LLVM 4.0 for Emscripten, we can
drop checks for LLVM >= 4.0 and < 4.0.
2018-11-01 21:09:02 +01:00
Alex Crichton
0c3d08e967 std: Improve codegen size of accessing TLS
Some code in the TLS implementation in libstd stores `Some(val)` into an
`&mut Option<T>` (effectively) and then pulls out `&T`, but it currently
uses `.unwrap()` which can codegen into a panic even though it can never
panic. With sufficient optimizations enabled (like LTO) the compiler can
see through this but this commit helps it along in normal mode
(`--release` with Cargo by default) to avoid codegen'ing the panic path.

This ends up improving the optimized codegen on wasm by ensuring that a
call to panic pulling in more file size doesn't stick around.
2018-11-01 10:46:31 -07:00
QuietMisdreavus
0fe6aae49a buffer errors from initial tokenization when parsing 2018-11-01 11:57:29 -05:00
bors
451987d86c Auto merge of #55579 - pietroalbini:rollup, r=kennytm
Rollup of 13 pull requests

Successful merges:

 - #55280 (Add libproc_macro to rust-src distribution)
 - #55469 (Regression tests for issue #54477.)
 - #55504 (Use vec![x; n] instead of iter::repeat(x).take(n).collect())
 - #55522 (use String::from() instead of format!() macro to construct Strings.)
 - #55536 (Pass suggestions as impl Iterator instead of Vec)
 - #55542 (syntax: improve a few allocations)
 - #55558 (Tweak `MatcherPos::matches`)
 - #55561 (Fix double_check tests on big-endian targets)
 - #55573 (Make sure the `aws` executable is in $PATH on macOS)
 - #55574 (Use `SmallVec` within `MoveData`.)
 - #55575 (Fix invalid_const_promotion test on some archs)
 - #55578 (Made doc example of `impl Default for …` use `-> Self` instead of explicit self type)
 - #55582 (Remove unused import copy from publish_toolstate.py)
2018-11-01 16:06:15 +00:00
Alex Crichton
49ec93586b wasm32: Inline a trivial function in libstd
No need for this to actually show up in optimized non-LTO executables!
2018-11-01 08:24:53 -07:00
kennytm
f76a8e3b86
Rollup merge of #55578 - regexident:fix/self, r=frewsxcv
Made doc example of `impl Default for …` use `-> Self` instead of explicit self type

There is no need to state the explicit type of `self`.
2018-11-01 22:56:36 +08:00
kennytm
1a25f22c80
Rollup merge of #55561 - smaeul:test-fixes, r=alexcrichton
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 `enum` values on big-endian machines. Avoid this issue by shrinking the integer member to the
same size as the enums.
2018-11-01 22:56:12 +08:00
kennytm
9550bc06dc
Rollup merge of #55582 - yamaguchi1024:publish_toolstate, r=alexcrichton
Remove unused import copy from publish_toolstate.py
2018-11-01 22:55:49 +08:00
kennytm
aa525b3914
Rollup merge of #55573 - kennytm:macos-aws, r=alexcrichton
Make sure the `aws` executable is in $PATH on macOS

Fixes #55571
2018-11-01 22:54:16 +08:00
QuietMisdreavus
8a3b5e99ad silence errors found during doctest pre-parsing 2018-11-01 09:52:28 -05:00
QuietMisdreavus
d6d8c6bd71 add a line between extracted crates and everything else 2018-11-01 09:52:28 -05:00
QuietMisdreavus
f36ed5b58d add env-logger to error-index-generator 2018-11-01 09:52:28 -05:00
Wesley Norris
cd407dfe74 Separates inner attributes from code during doctest parsing. 2018-11-01 09:52:28 -05:00
Wesley Norris
43b65b51e0 Tidy up source file and fix typo. 2018-11-01 09:52:27 -05:00
Wesley Norris
b79fdb8e3c Replaces fn main search and extern crate search with proper parsing. 2018-11-01 09:52:27 -05:00
Pietro Albini
8f4b86d1e7
Rollup merge of #55575 - parched:trap, r=RalfJung
Fix invalid_const_promotion test on some archs

On at least AArch64 `llvm.trap` raises SIGTRAP.

r? @RalfJung
2018-11-01 22:52:21 +08:00
Pietro Albini
7e80177299
Rollup merge of #55574 - nnethercote:gather_move-SmallVec, r=michaelwoerister
Use `SmallVec` within `MoveData`.

This reduces allocation counts significantly in a few benchmarks, reducing instruction counts by up to 2%.
2018-11-01 22:52:19 +08:00
Pietro Albini
15958ca9ff
Rollup merge of #55558 - nnethercote:tweak-MatcherPos-matches, r=petrochenkov
Tweak `MatcherPos::matches`

These changes reduce instruction counts on `sentry-cli-check` incremental builds by up to 2%.
2018-11-01 22:52:17 +08:00
Pietro Albini
133ba2d063
Rollup merge of #55542 - ljedrz:syntax_alloc_improvements, r=kennytm
syntax: improve a few allocations

Add 2 `reserve`s and a `with_capacity` where the final vector size is known.
2018-11-01 22:52:15 +08:00
Pietro Albini
912f00c187
Rollup merge of #55536 - ljedrz:don't_collect_suggestions, r=davidtwco
Pass suggestions as impl Iterator instead of Vec

This avoids some allocations when throwing errors, making failing faster ^^.
2018-11-01 22:52:13 +08:00
Pietro Albini
1e1d37b637
Rollup merge of #55522 - matthiaskrgr:no_format, r=zackmdavis
use String::from() instead of format!() macro to construct Strings.
2018-11-01 22:52:11 +08:00
Yuka Takahashi
7fd98df963 Remove unused import copy from publish_toolstate.py 2018-11-01 14:52:00 +01:00