Commit Graph

87161 Commits

Author SHA1 Message Date
Linus Färnstrand
9511fc7845 Fix checked_add/sub for sys/sgx/time.rs 2018-12-13 15:25:14 +01:00
Linus Färnstrand
f5a99c321b Add checked_sub for Instant and SystemTime 2018-12-13 15:25:14 +01:00
Linus Färnstrand
13f0463a19 Add checked_add method to Instant time type 2018-12-13 15:25:14 +01:00
bors
9fe5cb5342 Auto merge of #56161 - RalfJung:vecdeque-stacked-borrows, r=SimonSapin
VecDeque: fix for stacked borrows

`VecDeque` violates a version of stacked borrows where creating a shared reference is not enough to make a location *mutably accessible* from raw pointers (and I think that is the version we want).  There are two problems:

* Creating a `NonNull<T>` from `&mut T` goes through `&T` (inferred for a `_`), then `*const T`, then `NonNull<T>`. That means in this stricter version of Stacked Borrows, we cannot actually write to such a `NonNull` because it was created from a shared reference! This PR fixes that by going from `&mut T` to `*mut T` to `*const T`.
* `VecDeque::drain` creates the `Drain` struct by *first* creating a `NonNull` from `self` (which is an `&mut VecDeque`), and *then* calling `self.buffer_as_mut_slice()`. The latter reborrows `self`, asserting that `self` is currently the unique pointer to access this `VecDeque`, and hence invalidating the `NonNull` that was created earlier. This PR fixes that by instead using `self.buffer_as_slice()`, which only performs read accesses and creates only shared references, meaning the raw pointer (`NonNull`) remains valid.

It is possible that other methods on `VecDeque` do something similar, miri's test coverage of `VecDeque` is sparse to say the least.

Cc @nikomatsakis @Gankro
2018-12-13 07:12:19 +00:00
bors
ced7cc5c65 Auto merge of #56090 - nnethercote:filesearch, r=eddyb
Overhaul `FileSearch` and `SearchPaths`

`FileSearch::search()` traverses one or more directories. For each
directory it generates a `Vec<PathBuf>` containing one element per file
in that directory.

In some benchmarks this occurs enough that the allocations done for the
`PathBuf`s are significant, and in practice a small number of
directories are being traversed over and over again. For example, when
compiling the `tokio-webpush-simple` benchmark, two directories are
traversed 58 times each. Each of these directories have more than 100
files.

We can do all the necessary traversals up front, when `Session` is created,
and get the `Vec<PathBuf>`s then.

This reduces instruction counts on several benchmarks by 1--5%.

r? @alexcrichton

CC @eddyb, @michaelwoerister, @nikomatsakis
2018-12-13 03:35:15 +00:00
bors
2f35a1016b Auto merge of #55982 - alexcrichton:panic-extern-abort, r=zackmdavis
rustc: Switch `extern` functions to abort by default on panic

This was intended to land way back in 1.24, but it was backed out due to
breakage which has long since been fixed. An unstable `#[unwind]`
attribute can be used to tweak the behavior here, but this is currently
simply switching rustc's internal default to abort-by-default if an
`extern` function panics, making our codegen sound primarily (as
currently you can produce UB with safe code)

Closes #52652
2018-12-13 01:12:13 +00:00
bors
0076f58d53 Auto merge of #55992 - cramertj:pin-docs, r=alexcrichton
Expand std::pin module docs and rename std::pin::Pinned to PhantomPinned

cc https://github.com/rust-lang/rust/issues/49150, https://github.com/rust-lang/rust/issues/55766

r? @withoutboats
2018-12-12 21:04:34 +00:00
Taylor Cramer
709b7515e7 Rename Pinned marker type to PhantomPinned 2018-12-12 12:23:58 -08:00
Taylor Cramer
94856a7553 Expand documantation for std::pin module 2018-12-12 12:23:17 -08:00
Alex Crichton
1091eee65b rustc: Switch extern functions to abort by default on panic
This was intended to land way back in 1.24, but it was backed out due to
breakage which has long since been fixed. An unstable `#[unwind]`
attribute can be used to tweak the behavior here, but this is currently
simply switching rustc's internal default to abort-by-default if an
`extern` function panics, making our codegen sound primarily (as
currently you can produce UB with safe code)

Closes #52652
2018-12-12 08:07:28 -08:00
bors
dd8fc7dc06 Auto merge of #56735 - Mark-Simulacrum:fix-sign, r=alexcrichton
Fix gpg signing in manifest builder

GPG versions 2.x+ require that --batch be passed if --passphrase-fd is
to be accepted.

From the man page:

       --passphrase-fd n
              Read  the passphrase from file descriptor n. Only the first line
              will be read from file descriptor n. If you use  0  for  n,  the
              passphrase  will  be  read  from STDIN. This can only be used if
              only one passphrase is supplied.

              Note that this passphrase is only used if the option --batch has
              also been given.  This is different from GnuPG version 1.x.
2018-12-12 15:37:54 +00:00
bors
bd47d6825b Auto merge of #56092 - alexcrichton:no-more-std-subodules, r=Mark-Simulacrum
std: Depend directly on crates.io crates

Ever since we added a Cargo-based build system for the compiler the
standard library has always been a little special, it's never been able
to depend on crates.io crates for runtime dependencies. This has been a
result of various limitations, namely that Cargo doesn't understand that
crates from crates.io depend on libcore, so Cargo tries to build crates
before libcore is finished.

I had an idea this afternoon, however, which lifts the strategy
from #52919 to directly depend on crates.io crates from the standard
library. After all is said and done this removes a whopping three
submodules that we need to manage!

The basic idea here is that for any crate `std` depends on it adds an
*optional* dependency on an empty crate on crates.io, in this case named
`rustc-std-workspace-core`. This crate is overridden via `[patch]` in
this repository to point to a local crate we write, and *that* has a
`path` dependency on libcore.

Note that all `no_std` crates also depend on `compiler_builtins`, but if
we're not using submodules we can publish `compiler_builtins` to
crates.io and all crates can depend on it anyway! The basic strategy
then looks like:

* The standard library (or some transitive dep) decides to depend on a
  crate `foo`.
* The standard library adds

  ```toml
  [dependencies]
  foo = { version = "0.1", features = ['rustc-dep-of-std'] }
  ```
* The crate `foo` has an optional dependency on `rustc-std-workspace-core`
* The crate `foo` has an optional dependency on `compiler_builtins`
* The crate `foo` has a feature `rustc-dep-of-std` which activates these
  crates and any other necessary infrastructure in the crate.

A sample commit for `dlmalloc` [turns out to be quite simple][commit].
After that all `no_std` crates should largely build "as is" and still be
publishable on crates.io! Notably they should be able to continue to use
stable Rust if necessary, since the `rename-dependency` feature of Cargo
is soon stabilizing.

As a proof of concept, this commit removes the `dlmalloc`,
`libcompiler_builtins`, and `libc` submodules from this repository. Long
thorns in our side these are now gone for good and we can directly
depend on crates.io! It's hoped that in the long term we can bring in
other crates as necessary, but for now this is largely intended to
simply make it easier to manage these crates and remove submodules.

This should be a transparent non-breaking change for all users, but one
possible stickler is that this almost for sure breaks out-of-tree
`std`-building tools like `xargo` and `cargo-xbuild`. I think it should
be relatively easy to get them working, however, as all that's needed is
an entry in the `[patch]` section used to build the standard library.
Hopefully we can work with these tools to solve this problem!

[commit]: 28ee12db81
2018-12-12 13:05:59 +00:00
bors
ae3833db3b Auto merge of #56039 - ljedrz:sorted_map_upgrades, r=matthewjasper
SortedMap upgrades

- change the impl `From<Iterator<I>>` to `FromIterator<I>`
- make the impls of `Index` and `get` match the ones from `BTreeMap`
- add `is_empty` and `contains_key`
- readability/whitespace fixes
- add a proper `Iterator` implementation
- `impl IntoIterator for &SortedMap`

These changes make `SortedMap` almost a drop-in replacement for `BTreeMap`, at least to the point it is used by `rustc`; what is left is `Entry` API that I'd like to follow this PR with, and possibly implementing `ParallelIterator`.
2018-12-12 10:44:32 +00:00
bors
a64cdec1b4 Auto merge of #56010 - euclio:intra-doc-spans, r=QuietMisdreavus
fix intra-link resolution spans in block comments

This commit improves the calculation of code spans for intra-doc
resolution failures. All sugared doc comments should now have the
correct spans, including those where the comment is longer than the
docs.

It also fixes an issue where the spans were calculated incorrectly for
certain unsugared doc comments. The diagnostic will now always use the
span of the attributes, as originally intended.

Fixes #55964.

r? @QuietMisdreavus
2018-12-12 08:18:13 +00:00
Nicholas Nethercote
209240dc26 Remove some env vars for rustdoc invocations.
In an attempt to avoid "thread '<unnamed>' panicked at 'failed to
acquire jobserver token: Bad file descriptor" errors.
2018-12-12 16:30:06 +11:00
Alex Crichton
4c21a3bc2a std: Depend directly on crates.io crates
Ever since we added a Cargo-based build system for the compiler the
standard library has always been a little special, it's never been able
to depend on crates.io crates for runtime dependencies. This has been a
result of various limitations, namely that Cargo doesn't understand that
crates from crates.io depend on libcore, so Cargo tries to build crates
before libcore is finished.

I had an idea this afternoon, however, which lifts the strategy
from #52919 to directly depend on crates.io crates from the standard
library. After all is said and done this removes a whopping three
submodules that we need to manage!

The basic idea here is that for any crate `std` depends on it adds an
*optional* dependency on an empty crate on crates.io, in this case named
`rustc-std-workspace-core`. This crate is overridden via `[patch]` in
this repository to point to a local crate we write, and *that* has a
`path` dependency on libcore.

Note that all `no_std` crates also depend on `compiler_builtins`, but if
we're not using submodules we can publish `compiler_builtins` to
crates.io and all crates can depend on it anyway! The basic strategy
then looks like:

* The standard library (or some transitive dep) decides to depend on a
  crate `foo`.
* The standard library adds

  ```toml
  [dependencies]
  foo = { version = "0.1", features = ['rustc-dep-of-std'] }
  ```
* The crate `foo` has an optional dependency on `rustc-std-workspace-core`
* The crate `foo` has an optional dependency on `compiler_builtins`
* The crate `foo` has a feature `rustc-dep-of-std` which activates these
  crates and any other necessary infrastructure in the crate.

A sample commit for `dlmalloc` [turns out to be quite simple][commit].
After that all `no_std` crates should largely build "as is" and still be
publishable on crates.io! Notably they should be able to continue to use
stable Rust if necessary, since the `rename-dependency` feature of Cargo
is soon stabilizing.

As a proof of concept, this commit removes the `dlmalloc`,
`libcompiler_builtins`, and `libc` submodules from this repository. Long
thorns in our side these are now gone for good and we can directly
depend on crates.io! It's hoped that in the long term we can bring in
other crates as necessary, but for now this is largely intended to
simply make it easier to manage these crates and remove submodules.

This should be a transparent non-breaking change for all users, but one
possible stickler is that this almost for sure breaks out-of-tree
`std`-building tools like `xargo` and `cargo-xbuild`. I think it should
be relatively easy to get them working, however, as all that's needed is
an entry in the `[patch]` section used to build the standard library.
Hopefully we can work with these tools to solve this problem!

[commit]: 28ee12db81
2018-12-11 21:08:22 -08:00
Mark Rousskov
4d5413bc1d Fix gpg signing in manifest builder
GPG versions 2.x+ require that --batch be passed if --passphrase-fd is
to be accepted.
2018-12-11 19:10:45 -07:00
Nicholas Nethercote
95a6262df1 Replace FileSearch::for_each_lib_search_path with search_paths.
Returning an iterator leads to nicer code all around.
2018-12-12 10:36:15 +11:00
Nicholas Nethercote
2bfe32cc93 Avoid regenerating the Vec<PathBuf> in FileSearch::search().
`FileSearch::search()` traverses one or more directories. For each
directory it generates a `Vec<PathBuf>` containing one element per file
in that directory.

In some benchmarks this occurs enough that the allocations done for the
`PathBuf`s are significant, and in practice a small number of
directories are being traversed over and over again. For example, when
compiling the `tokio-webpush-simple` benchmark, two directories are
traversed 58 times each. Each of these directories have more than 100
files.

This commit changes things so that all the `Vec<PathBuf>`s that will be
needed by a `Session` are precomputed when that `Session` is created;
they are stored in `SearchPath`. `FileSearch` gets a reference to the
necessary `SearchPath`s. This reduces instruction counts on several
benchmarks by 1--5%.

The commit also removes the barely-used `visited_dirs` hash in
`for_each_lib_searchPath`. It only detects if `tlib_path` is the same as
one of the previously seen paths, which is unlikely.
2018-12-12 10:36:15 +11:00
Nicholas Nethercote
f13006182c Introduce SearchPath and replace SearchPaths with Vec<SearchPath>.
It's more idiomatic, makes the code shorter, and will help with the next
commit.
2018-12-12 10:36:15 +11:00
Nicholas Nethercote
2640da7d13 Remove Session::sysroot().
Instead of maybe storing its own sysroot and maybe deferring to the one
in `Session::opts`, just clone the latter when necessary so one is
always directly available. This removes the need for the getter.
2018-12-12 10:36:15 +11:00
Nicholas Nethercote
0238bcc60d Avoid a useless FxHashSet::insert in FileSearch::for_each_lib_search_path. 2018-12-12 10:36:15 +11:00
bors
8375ab4ff4 Auto merge of #53497 - fukatani:test-debuginfo-function-call, r=tromey
Test with gdb8.2 and add debuginfo printing function call test

As far as I can see, `print function()` is not tested. It is important feature for debugging.
2018-12-11 16:27:49 +00:00
bors
3499575282 Auto merge of #56243 - RalfJung:test-deterministic, r=alexcrichton
libtest: Use deterministic HashMap, avoid spawning thread if there is no concurrency

It seems desirable to make a test and bench runner deterministic, which this achieves by using a deterministic hasher. Also, we we only have 1 thread, we don't bother spawning one and just use the main thread.

The motivation for this is to be able to run the test harness in miri, where we can neither access the OS RNG, nor spawn threads.
2018-12-11 14:04:15 +00:00
Unknown
e6bbf7ef8d Add function call test, Update gdb and test docker image install gdb by ppa. 2018-12-11 22:20:15 +09:00
Ralf Jung
c28c28779c use an enum instead of bool 2018-12-11 11:02:23 +01:00
bors
3a31213371 Auto merge of #56703 - alexcrichton:fix-tools, r=Mark-Simulacrum
Fix build of the `build-manifest` tool

Accidentally broken in #56258!
2018-12-11 08:14:14 +00:00
Mark Rousskov
ddd8b416a6 Build manifest tool on mingw-check builder
This builder is not really the correct place to put this, but it
definitely has the time budget and checking this tool builds on just one
platform is more than sufficient.
2018-12-10 21:43:52 -08:00
Alex Crichton
98a38673ec Fix build of the build-manifest tool
Accidentally broken in #56258!
2018-12-10 19:34:47 -08:00
bors
4c0116e13f Auto merge of #56627 - alexcrichton:update-cargo, r=alexcrichton
Update Cargo submodule and its dependencies

Hopefully just another routine update!

So far this starts to enable the `std::arch` in stage0 builds of rustc.
This means that we may need stage0/not(stage0) in stdsimd itself, but
more and more code is starting to use `std::arch` so I think it's time
to start shifting the balance of work here.
2018-12-11 03:22:10 +00:00
Andy Russell
56413ecffc
fix intra-link resolution spans in block comments
This commit improves the calculation of code spans for intra-doc
resolution failures. All sugared doc comments should now have the
correct spans, including those where the comment is longer than the
docs.

It also fixes an issue where the spans were calculated incorrectly for
certain unsugared doc comments. The diagnostic will now always use the
span of the attributes, as originally intended.

Fixes #55964.
2018-12-10 21:08:26 -05:00
Alex Crichton
b4110900bd Update Cargo submodule and its dependencies
Hopefully just another routine update!

So far this starts to enable the `std::arch` in stage0 builds of rustc.
This means that we may need stage0/not(stage0) in stdsimd itself, but
more and more code is starting to use `std::arch` so I think it's time
to start shifting the balance of work here.
2018-12-10 13:45:22 -08:00
bors
da1527cb06 Auto merge of #56688 - GuillaumeGomez:rollup, r=GuillaumeGomez
Rollup of 5 pull requests

Successful merges:

 - #56491 (emit error with span for empty asserts)
 - #56633 (Fix right arrow size for crate filter)
 - #56641 (fix span for invalid number of parameters in trait method)
 - #56656 (Fix typo)
 - #56661 (Add regression test for ICE)

Failed merges:

r? @ghost
2018-12-10 21:42:20 +00:00
Guillaume Gomez
a11de4171c
Rollup merge of #56661 - aelred:issue-55846, r=Mark-Simulacrum
Add regression test for ICE

Fixes #55846 with a minimal (or as best as I can manage) test case. I tested this against 1.30.0 manually to confirm it crashes.

The issue seemed to have something to do with associated types. It's possible someone with more knowledge can shrink the test case down further, or make it clearer.
2018-12-10 22:02:02 +01:00
Guillaume Gomez
b3f1650b34
Rollup merge of #56656 - BeatButton:liballoc_string_typo, r=Centril
Fix typo
2018-12-10 22:02:01 +01:00
Guillaume Gomez
b37ad661c7
Rollup merge of #56641 - GuillaumeGomez:span-trait-method-invalid-nb-parameters, r=estebank
fix span for invalid number of parameters in trait method

Fixes #56582.
2018-12-10 22:02:00 +01:00
Guillaume Gomez
33bf29155b
Rollup merge of #56633 - GuillaumeGomez:fix-right-arrow-display, r=QuietMisdreavus
Fix right arrow size for crate filter

This bug only appears when a crate has a long name:

<img width="1440" alt="screenshot 2018-12-08 at 16 36 21" src="https://user-images.githubusercontent.com/3050060/49687728-7de06180-fb07-11e8-8554-d32597351fac.png">

With this fix, it goes back to normal, whatever the size:

<img width="1440" alt="screenshot 2018-12-08 at 16 36 05" src="https://user-images.githubusercontent.com/3050060/49687730-8769c980-fb07-11e8-91b7-b5e1961211a2.png">

r? @QuietMisdreavus
2018-12-10 22:01:58 +01:00
Guillaume Gomez
dec7b19516
Rollup merge of #56491 - euclio:assert-error, r=estebank
emit error with span for empty asserts

Fixes #55547.
2018-12-10 22:01:57 +01:00
bors
1137d29d5e Auto merge of #56666 - Xanewok:rustfmt, r=kennytm
Update Rustfmt and RLS

Supersedes #56652, hopefully fixes toolstate.

r? @SimonSapin
2018-12-10 14:40:41 +00:00
ljedrz
5b6401f09d sorted_map: add contains_key function 2018-12-10 14:11:14 +01:00
ljedrz
08c6bda3ee sorted_map: readability/whitespace fixes 2018-12-10 14:06:32 +01:00
ljedrz
eb772045f8 sorted_map: add is_empty 2018-12-10 14:03:25 +01:00
ljedrz
61de47dd25 sorted_map: make the impls of Index and get match ones from BTreeMap 2018-12-10 14:03:25 +01:00
ljedrz
875ce5f851 sorted_map: change From<Iterator<I>> to FromIterator<I> 2018-12-10 14:03:25 +01:00
bors
3a75e80557 Auto merge of #56157 - RalfJung:park, r=nagisa
expand thread::park explanation

Cc @carllerche @parched @stjepang
2018-12-10 12:19:47 +00:00
bors
9567a1cf59 Auto merge of #56624 - RalfJung:miri, r=oli-obk
update miri

r? @oli-obk
2018-12-10 09:58:22 +00:00
Igor Matuszewski
4ceed86278 Bump failure to 0.1.3
We use failure_derive 0.1.3, try to work around
```
error[E0433]: failed to resolve: could not find `AsFail` in `failure`
```
2018-12-10 10:57:43 +01:00
Igor Matuszewski
a5755f99ff Update in-tree rustfmt to 1.0.1 to dedup versions 2018-12-10 09:05:37 +01:00
Igor Matuszewski
14b1b57e6a Update RLS 2018-12-10 09:01:26 +01:00
Simon Sapin
2c2a6acd99 Update rustfmt
Pick up https://github.com/rust-lang/rustfmt/pull/3236
2018-12-10 08:59:10 +01:00