85432 Commits

Author SHA1 Message Date
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
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
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
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
Pietro Albini
876841267b
Rollup merge of #55504 - ljedrz:simpler_repeated_elements, r=oli-obk
Use vec![x; n] instead of iter::repeat(x).take(n).collect()

It's shorter and possibly easier to optimize.
2018-11-01 11:55:22 +01:00
Pietro Albini
38435b1401
Rollup merge of #55469 - pnkfelix:issue-54477-regression-tests, r=nikomatsakis
Regression tests for issue #54477.

At some point someone may want to revisit PR #53564

it would be really good to have regression tests for #54477 before that happens. :)
2018-11-01 11:55:20 +01:00
Pietro Albini
5b00095137
Rollup merge of #55280 - vlad20012:add-libproc_macro-to-src-disrt, r=Mark-Simulacrum
Add libproc_macro to rust-src distribution

Fixes #55279
2018-11-01 11:55:19 +01:00
Vincent Esche
0d38b0ec9a Made doc example of impl Default for … use -> Self instead of explicit self type 2018-11-01 11:52:44 +01:00
Nicholas Nethercote
0e5d7d2322 Use SmallVec within MoveData.
This reduces allocation counts significantly in a few benchmarks,
reducing instruction counts by up to 2%.
2018-11-01 19:03:56 +11:00
kennytm
a85467748f
Make sure the installed awscli is found on macOS. 2018-11-01 15:30:30 +08:00
bors
f6e9a6e41c Auto merge of #55548 - alexcrichton:bump, r=Mark-Simulacrum
Bump nightly to 1.32.0

* Also update the bootstrap compiler
* Update cargo to 1.32.0
* Clean out stage0 annotations
2018-11-01 06:26:28 +00:00
bors
c613d26ee2 Auto merge of #55521 - nrc:rls-fix, r=petrochenkov
save-analysis: bug fix and optimisation.

The first commit fixes a bug in name resolution and save-analysis (introduced in #54145) and removes an unused parameter. This fixes the RLS tests, which are currently blocking distribution of the RLS. The second commit removes macro uses from save-analysis data, since these are never used, they just take up space.

r? @petrochenkov
2018-11-01 02:41:00 +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
James Duley
01e0d23d66 Fix invalid_const_promotion test on some archs
On at least AArch64 `llvm.trap` raises SIGTRAP.
2018-10-31 22:59:53 +00:00
Nicholas Nethercote
0d2abe46ca Use SmallVec for the inner vectors in MatcherPos::matches.
This avoids some allocations.
2018-11-01 08:45:26 +11:00
Nicholas Nethercote
c60ed5d22c Share empty Vecs more within MatcherPos::matches.
`create_matches` creates a `Vec<Rc<Vec<NamedMatch>>>`. Even though all the
inner `Vec`s are empty, each one is created separately.

This commit changes `create_matches` so it instead creates one empty inner
`Vec`, and shares it.

The commit also changes `MatcherPos::matches` to a boxed slice, because its
length doesn't change.
2018-11-01 08:43:40 +11:00
Alex Crichton
d0060d72e5 Bump nightly to 1.32.0
* Also update the bootstrap compiler
* Update cargo to 1.32.0
* Clean out stage0 annotations
2018-10-31 11:53:50 -07:00
ljedrz
f4c03fd847 syntax: improve a few allocations 2018-10-31 16:58:51 +01:00
bors
de9666f123 Auto merge of #54806 - parched:park, r=RalfJung
thread::unpark: Avoid notifying with mutex locked.

This means when the other thread wakes it can continue right away
instead of having to wait for the mutex.

Also add some comments explaining why the mutex needs to be locked in
the first place.

This is a follow up to https://github.com/rust-lang/rust/pull/54174
I did some tests with relacy [here](https://gist.github.com/parched/b7fb88c97755a81e5cb9f9048a15f7fb) (This PR is InnerV2). If anyone can think of some other test case worth adding let me know.

r? @RalfJung
2018-10-31 13:52:00 +00:00
ljedrz
9ff0f33748 Pass suggestions as impl Iterator instead of Vec 2018-10-31 13:56:20 +01:00
bors
05812fa8c5 Auto merge of #55304 - alexcrichton:update-credentials, r=kennytm
ci: Move global credentials to web configuration

This commit moves a number of our encrypted credentials stored in
configuration files in this repository to env vars on the web UI. This
will hopefully make it easier to rotate credentials in the future as
well as quickly change them if the need arises. (quicker than landing a
PR that is).

This also updates the travis deployment process to always use the `aws`
command line tool which we're already installing on Linux and should
enable us to avoid all `dpl` gem issues as well as have greater control
over what's going where.
2018-10-31 06:42:24 +00:00
Nick Cameron
435d832c5d save analysis: don't dump macro refs 2018-10-31 13:29:02 +13:00
bors
0db7abe5b6 Auto merge of #54004 - tromey:enum-debuginfo, r=tromey
Fix DWARF generation for enums

The DWARF generated for Rust enums was always somewhat unusual.
Rather than using DWARF constructs directly, it would emit magic field
names like "RUST$ENCODED$ENUM$0$Name" and "RUST$ENUM$DISR".  Since
PR #45225, though, even this has not worked -- the ad hoc scheme was
not updated to handle the wider variety of niche-filling layout
optimizations now available.

This patch changes the generated DWARF to use the standard tags meant
for this purpose; namely, DW_TAG_variant and DW_TAG_variant_part.

The patch to implement this went in to LLVM 7.  In order to work with
older versions of LLVM, and because LLVM doesn't do anything here for
PDB, the existing code is kept as a fallback mode.

Support for this DWARF is in the Rust lldb and in gdb 8.2.

Closes #32920
Closes #32924
Closes #52762
Closes #53153
2018-10-30 23:36:10 +00:00
Matthias Krüger
f6b8876d45 use String::from() instead of format!() macro to construct Strings. 2018-10-31 00:10:10 +01:00
James Duley
d3e71e4986 thread::unpark: Avoid notifying with mutex locked.
This means when the other thread wakes it can continue right away
instead of having to wait for the mutex.

Also add some comments explaining why the mutex needs to be locked in
the first place.
2018-10-30 22:54:35 +00:00
Nick Cameron
4895deaeea save-analysis: make sure we save the def for the last segment of a path 2018-10-31 11:53:38 +13:00
bors
1cf82fd9c0 Auto merge of #55303 - alexcrichton:update-libm, r=kennytm
Update compiler-builtins submodule

This commit updates our `compiler-builtins` submodule which brings in at
least a few improvements for intrinsics on wasm32
2018-10-30 20:43:36 +00:00
Tom Tromey
98b26888e5 Update lldb
Update src/tools/lldb to pick up a needed bug fix in the
DW_TAG_variant_part handling.
2018-10-30 12:09:11 -06:00
Tom Tromey
d36e37e43e Add legacy debuginfo tests
The enum debuginfo patch includes a legacy mode that is used when
building against LLVM 5 and LLVM 6.  The main enum debuginfo tests
have been updated to rely on the new approach and a new-enough gdb.
This patch makes a copy of these tests so that the fallback mode will
continue to be tested.

Note that nil-enum.rs is not copied; it seemed not to provide enough
value to bother.

A new header directive is added, "ignore-llvm-version".  I will send a
patch to update the rustc documentation once this lands.
2018-10-30 12:09:11 -06:00
Tom Tromey
8bbb62f849 Update enum debuginfo tests
Bug #52452 notes some debuginfo test regressions when moving to gdb
8.1.  This series will also cause versions of gdb before 8.2 to fail
when a recent LLVM is used -- DW_TAG_variant_part support was not
added until 8.2.

This patch updates one of the builders to a later version of Ubuntu,
which comes with gdb 8.2.  It updates the relevant tests to require
both a new-enough LLVM and a new-enough gdb; the subsequent patch
arranges to continue testing the fallback mode.

The "gdbg" results are removed from these tests because the tests now
require a rust-enabled gdb.

If you read closely, you'll see that some of the lldb results in this
patch still look a bit strange.  This will be addressed in a
subsequent patch; I believe the fix is to disable the Python
pretty-printers when lldb is rust-enabled.
2018-10-30 12:09:04 -06:00
Tom Tromey
da7b6b4b4d Avoid possible integer overflow in niche value computation
@eddyb pointed out in review that the niche value computation had a
possible integer overflow problem, fixed here as he suggested.
2018-10-30 12:06:07 -06:00
Tom Tromey
e7c49a738e Add more enum debug info tests
Rename the previous enum debug info test, and add more tests to cover
c-like enums and tagged (ordinary) enums.
2018-10-30 12:06:07 -06:00
Tom Tromey
d8b0eb7caf Tighten enum-debug test
Update the new enum-debug to ensure that field "D" does not have a
discrimnant.
2018-10-30 12:06:07 -06:00
Tom Tromey
c32f402749 Address review comments
This fixes the issues pointed out in review.
2018-10-30 12:06:07 -06:00
Tom Tromey
71ce4c3007 Fix DWARF generation for enums
The DWARF generated for Rust enums was always somewhat unusual.
Rather than using DWARF constructs directly, it would emit magic field
names like "RUST$ENCODED$ENUM$0$Name" and "RUST$ENUM$DISR".  Since
PR #45225, though, even this has not worked -- the ad hoc scheme was
not updated to handle the wider variety of niche-filling layout
optimizations now available.

This patch changes the generated DWARF to use the standard tags meant
for this purpose; namely, DW_TAG_variant and DW_TAG_variant_part.

The patch to implement this went in to LLVM 7.  In order to work with
older versions of LLVM, and because LLVM doesn't do anything here for
PDB, the existing code is kept as a fallback mode.

Support for this DWARF is in the Rust lldb and in gdb 8.2.

Closes #32920
Closes #32924
Closes #52762
Closes #53153
2018-10-30 12:06:07 -06:00