Commit graph

8683 commits

Author SHA1 Message Date
Ozaren
f8bd80a830 Change bounds on TryFrom blanket impl to use Into instead of From 2018-12-13 16:53:50 -05: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
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
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
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
b7da2c6e12 Auto merge of #56630 - sinkuu:core_iter, r=kennytm
Resolve FIXME in libcore/iter/mod.rs

and makes a few improvements.
2018-12-09 00:18:34 +00:00
Shotaro Yamada
5728a043e8 Don't call size_hint of underlying iterator needlessly 2018-12-09 00:01:09 +09:00
Shotaro Yamada
e704ce9e8a Resolve FIXME and cleanup 2018-12-09 00:01:09 +09:00
Shotaro Yamada
fbe5aa57ed Override Cycle::try_fold
name                            old ns/iter  new ns/iter  diff ns/iter   diff %  speedup
 iter::bench_cycle_take_ref_sum  927,152      927,194                42    0.00%   x 1.00
 iter::bench_cycle_take_sum      938,129      603,492          -334,637  -35.67%   x 1.55
2018-12-09 00:01:09 +09:00
Mazdak Farrokhzad
7f076fa521
Rollup merge of #56602 - dwijnand:fix-ptr-hash-docs, r=Centril
Fix the just-introduced ptr::hash docs

Follow-up to #56250.
2018-12-08 08:43:48 +01:00
Mazdak Farrokhzad
eb30d56d37
Rollup merge of #56599 - dlrobertson:fix_va_arg, r=eddyb
codegen: Fix va_list - aarch64 iOS/Windows

## Summary

Fix code generated for `VaList` on Aarch64 iOS/Windows.

## Details

According to the [Apple - ARM64 Function Calling Conventions]:

> ... the type va_list is an alias for char * rather than for the struct
> type specified in the generic PCS.

The current implementation uses the generic Aarch64 structure for `VaList`
for Aarch64 iOS. Switch to using the `char *` variant of the `VaList`
and use the corresponding `emit_ptr_va_arg` for the `va_arg` intrinsic.

Windows always uses the `char *` variant of the `VaList`. Update the `va_arg`
intrinsic to use `emit_ptr_va_arg`.

[Apple - ARM64 Function Calling Conventions]: https://developer.apple.com/library/archive/documentation/Xcode/Conceptual/iPhoneOSABIReference/Articles/ARM64FunctionCallingConventions.html
2018-12-08 08:43:47 +01:00
bors
059e6a6f57 Auto merge of #56578 - alexreg:cosmetic-1, r=alexreg
Various minor/cosmetic improvements to code

r? @Centril 😄
2018-12-08 03:50:16 +00:00
Alexander Regueiro
ee89c088b0 Various minor/cosmetic improvements to code 2018-12-07 23:53:34 +00:00
Dan Robertson
3dfd8f7a64
codegen: Fix va_list - aaarch64 iOS/Windows
According to the Apple developer docs:

> The type va_list is an alias for char * rather than for the struct
> type specified in the generic PCS.

The current implementation uses the generic Aarch64 structure for VaList
for Aarch64 iOS.

Windows always uses the char * variant of the va_list.
2018-12-07 22:54:56 +00:00
Andy Russell
2f6226518b
use top level fs functions where appropriate
This commit replaces many usages of `File::open` and reading or writing
with `fs::read_to_string`, `fs::read` and `fs::write`. This reduces code
complexity, and will improve performance for most reads, since the
functions allocate the buffer to be the size of the file.

I believe that this commit will not impact behavior in any way, so some
matches will check the error kind in case the file was not valid UTF-8.
Some of these cases may not actually care about the error.
2018-12-07 12:54:11 -05:00
Dale Wijnand
ba3db7b03a
grammar 2018-12-07 17:34:53 +01:00
Dale Wijnand
1ac066ef04
Fix the just-introduced ptr::hash docs 2018-12-07 17:33:32 +01:00
Ralf Jung
21b5950cf9 Unique/NonNull::from: make sure we convert to raw pointers ASAP
By going through a shared reference, we share the destination as read-only, meaning we can read but not write with the raw pointers
2018-12-07 09:20:54 +01:00
kennytm
a40aa45980
Rollup merge of #56574 - cbarrick:master, r=varkor
Fix a stutter in the docs for slice::exact_chunks

Before this change, the docs for `slice::exact_chunks` reads like this:

> See `chunks` for a variant of this iterator that also returns the remainder as a smaller chunk, and `rchunks_exact` for the same iterator but starting at the end of the slice of the slice.

Notice that stutter at the end? This commit fixes it.
2018-12-07 12:42:36 +08:00
kennytm
6d3501ebe3
Rollup merge of #56250 - dwijnand:ptr-hash, r=alexcrichton
Introduce ptr::hash for references

The RHS is what I used, which wasn't as convenient as `ptr::eq`, so I wondered: should `ptr::hash` exist?

My first Rust PR, so I'm going to need some guidance. :)
2018-12-07 12:42:30 +08:00
Chris Barrick
b6d3668c42 Fix a stutter in the docs for slice::exact_chunks 2018-12-06 16:53:24 -05:00
bors
367e783e6f Auto merge of #56557 - pietroalbini:rollup, r=pietroalbini
Rollup of 11 pull requests

Successful merges:

 - #56315 (Rustdoc inline macro reexport)
 - #56332 ([rustdoc] Specific crate search)
 - #56362 (Stabilise exhaustive integer patterns)
 - #56426 (libsyntax_pos: A few tweaks)
 - #56441 (rustbuild: Fix issues with compiler docs)
 - #56446 (pass the parameter environment to `traits::find_associated_item`)
 - #56500 (cleanup: remove static lifetimes from consts)
 - #56525 (Avoid extra copy and syscall in std::env::current_exe)
 - #56528 (Remove unused dependency (rustc_lint -> rustc_mir))
 - #56548 (Optimized string FromIterator + Extend impls)
 - #56553 (Don't print the profiling summary to stdout when -Zprofile-json is set)

Failed merges:

r? @ghost
2018-12-06 12:41:30 +00:00
bors
128a1fa4e1 Auto merge of #55635 - oli-obk:min_const_unsafe_fn, r=nikomatsakis
Allow calling `const unsafe fn` in `const fn` behind a feature gate

cc #55607

r? @Centril
2018-12-06 10:18:17 +00:00
Pietro Albini
e941e1a624
Rollup merge of #56500 - ljedrz:cleanup_rest_of_const_lifetimes, r=zackmdavis
cleanup: remove static lifetimes from consts

A follow-up to https://github.com/rust-lang/rust/pull/56497.
2018-12-06 07:48:57 +01:00
Pietro Albini
f8ee5ab803
Rollup merge of #56538 - xfix:patch-13, r=bluss
Use inner iterator may_have_side_effect for Cloned

Previous implementation wasn't correct, as an inner iterator could have had side effects. Noticed by @bluss in #56534.
2018-12-05 23:54:39 +01:00
Pietro Albini
21ba28f1c6
Rollup merge of #56424 - mark-i-m:explain-raw, r=Centril
Mention raw-ident syntax

According to https://github.com/rust-lang/rust/pull/56419#pullrequestreview-180542790

Blocked on #56419

r? @Centril
2018-12-05 23:54:29 +01:00
Pietro Albini
64371f1cfe
Rollup merge of #56119 - frewsxcv:frewsxcv-option-carrier, r=TimNN
Utilize `?` instead of `return None`.

None
2018-12-05 23:54:25 +01:00
Konrad Borowski
a964307999 Add a test for cloned side effects 2018-12-05 17:53:34 +01:00
Konrad Borowski
3eddc743f2 Use inner iterator may_have_side_effect for Cloned
Previous implementation wasn't correct, as an inner iterator
could have had side effects.
2018-12-05 16:48:34 +01:00
Corey Farwell
9012af6f19 Utilize ? instead of return None. 2018-12-04 08:57:34 -08:00
ljedrz
d0c64bb296 cleanup: remove static lifetimes from consts 2018-12-04 12:46:10 +01:00
Oliver Scherer
3ce211dbd0 Increase code-reuse and -readability 2018-12-04 10:17:37 +01:00
Oliver Scherer
37ef5e43af Add tests for stable unsafe features in const fn 2018-12-04 10:17:37 +01:00
Oliver Scherer
1894a5fe2c Also make immutable references to non-freeze restricted value range types unsafe 2018-12-04 10:17:36 +01:00
Oliver Scherer
02b22323f1 Make sure the initialization of constrained int range newtypes is unsafe 2018-12-04 10:17:36 +01:00
Dale Wijnand
ad765695d1
Fix ptr::hash, just hash the raw pointer 2018-12-04 08:06:26 +00:00
Dale Wijnand
6fab3f9c69
Make ptr::hash take a raw painter like ptr::eq 2018-12-04 07:48:22 +00:00
Mark Mansi
0b40be696e link to raw identifiers 2018-12-03 13:05:04 -06:00
Mark Mansi
9c8802dc01 Explain raw identifer syntax 2018-12-03 13:05:04 -06:00
kennytm
ca98bce303
Rollup merge of #56419 - mark-i-m:remove-try, r=Centril
Remove some uses of try!
2018-12-03 18:07:15 +08:00
bors
8660eba2b9 Auto merge of #56275 - RalfJung:win-mutex, r=SimonSapin
use MaybeUninit instead of mem::uninitialized for Windows Mutex

I hope this builds, I do not have a Windows machine to test...
2018-12-02 13:45:22 +00:00
Ralf Jung
f4f8b211a8 let FIXME refer to tracking issue 2018-12-02 12:29:54 +01:00
Mark Mansi
e7e96921c2 remove some uses of try! 2018-12-01 15:48:55 -06:00
bors
d3ed34824c Auto merge of #56165 - RalfJung:drop-glue-type, r=eddyb,nikomatsakis
drop glue takes in mutable references, it should reflect that in its type

When drop glue begins, it should retag, like all functions taking references do. But to do that, it needs to take the reference at a proper type: `&mut T`, not `*mut T`.

Failing to retag can mean that the memory the reference points to remains frozen, and `EscapeToRaw` on a frozen location is a NOP, meaning later mutations cause a Stacked Borrows violation.

Cc @nikomatsakis @Gankro because Stacked Borrows
Cc @eddyb for the changes to miri argument passing (the intention is to allow passing `*mut [u8]` when `&mut [u8]` is expected and vice versa)
2018-12-01 07:06:17 +00:00
kennytm
2584d9216d
Rollup merge of #55011 - vi:panic_immediate_abort, r=alexcrichton
Add libstd Cargo feature "panic_immediate_abort"

It stop asserts and panics from libstd to automatically
include string output and formatting code.

Use case: developing static executables smaller than 50 kilobytes,
where usual formatting code is excessive while keeping debuggability
in debug mode.

May resolve #54981.
2018-12-01 02:25:46 +08:00
kennytm
45aaaa70bb
Rollup merge of #56355 - Zoxc:inline-things, r=michaelwoerister
Add inline attributes and add unit to CommonTypes
2018-12-01 02:03:51 +08:00
kennytm
f7c407eb8b
Rollup merge of #56216 - SimonSapin:array-tryfrom-slice, r=withoutboats
Add TryFrom<&[T]> for [T; $N] where T: Copy

`TryFrom<&[T]> for &[T; $N]` (note *reference* to an array) already exists, but not needing to dereference makes type inference easier for example when using `u32::from_be_bytes`.

Also add doc examples doing just that.
2018-12-01 01:53:15 +08:00
Vitaly _Vi Shukela
f18a8c6163
Fix exceeding line width limit 2018-11-30 02:37:04 +03:00
Vitaly _Vi Shukela
d3f9788e59
panic_immediate_abort: Fix issues from review 2018-11-30 02:17:05 +03:00