Commit graph

10244 commits

Author SHA1 Message Date
Ralf Jung
b7f8b77eec
Rollup merge of #66822 - RalfJung:miri-panic, r=oli-obk
libunwind_panic: adjust miri panic hack

We adjust the Miri hack in libpanic_unwind such that even with `cfg(miri)`, we build a version of libpanic_unwind that actually works.

This is needed to resolve https://github.com/integer32llc/rust-playground/issues/548.

r? @oli-obk @alexcrichton
2019-12-02 09:34:12 +01:00
Mazdak Farrokhzad
b4bffcebca
Rollup merge of #66894 - dtolnay:prelude, r=Centril
Remove unneeded prelude imports in libcore tests

These three lines are from c82da7a54b dating back to 2015.

They cause problems when applying rustfmt to the codebase, because reordering wildcard imports can trigger new unused import warnings.

As a minimized example, the following program compiles successfully:

```rust
#![deny(unused_imports)]

use std::fmt::Debug;
use std::marker::Send;

pub mod repro {
    use std::prelude::v1::*;
    use super::*;

    pub type D = dyn Debug;
    pub type S = dyn Send;
}

pub type S = dyn Send;
```

but putting it through rustfmt produces a program that fails to compile:

```rust
#![deny(unused_imports)]

use std::fmt::Debug;
use std::marker::Send;

pub mod repro {
    use super::*;
    use std::prelude::v1::*;

    pub type D = dyn Debug;
    pub type S = dyn Send;
}

pub type S = dyn Send;
```

The error is:

```console
error: unused import: `std::prelude::v1::*`
 --> src/main.rs:8:9
  |
8 |     use std::prelude::v1::*;
  |         ^^^^^^^^^^^^^^^^^^^
```
2019-11-30 16:56:56 +01:00
Mazdak Farrokhzad
2e83c6d114
Rollup merge of #66889 - dtolnay:fmt6, r=rkruppe
Make python-generated source files compatible with rustfmt

This PR adjusts the generators for src/libcore/num/dec2flt/table.rs, src/libcore/unicode/printable.rs, and src/libcore/unicode/tables.rs to make it so running `rustfmt` on the generated files no longer needs to apply any changes.

This involves tweaking the python scripts where reasonable to better match rustfmt's style, and adding `#[rustfmt::skip]` to big constant tables that there's no point having rustfmt rewrap.

r? @Dylan-DPC
2019-11-30 16:56:55 +01:00
Mazdak Farrokhzad
123406cac7
Rollup merge of #66705 - pitdicker:atomic_mut_ptr, r=KodrAus
Atomic as_mut_ptr

I encountered the following pattern a few times: In Rust we use some atomic type like `AtomicI32`, and an FFI interface exposes this as `*mut i32` (or some similar `libc` type).

It was not obvious to me if a just transmuting a pointer to the atomic was acceptable, or if this should use a cast that goes through an `UnsafeCell`. See https://github.com/rust-lang/rust/issues/66136#issuecomment-557802477

Transmuting the pointer directly:
```rust
let atomic = AtomicI32::new(1);
let ptr = &atomic as *const AtomicI32 as *mut i32;
unsafe {
    ffi(ptr);
}
```

A dance with `UnsafeCell`:
```rust
let atomic = AtomicI32::new(1);
unsafe {
    let ptr = (&*(&atomic as *const AtomicI32 as *const UnsafeCell<i32>)).get();
    ffi(ptr);
}
```

Maybe in the end both ways could be valid. But why not expose a direct method to get a pointer from the standard library?

An `as_mut_ptr` method on atomics can be safe, because only the use of the resulting pointer is where things can get unsafe. I documented its use for FFI, and "Doing non-atomic reads and writes on the resulting integer can be a data race."

The standard library could make use this method in a few places in the WASM module.

cc @RalfJung as you answered my original question.
2019-11-30 16:56:47 +01:00
Paul Dicker
d34090a10a Fill tracking issue 2019-11-30 12:58:15 +01:00
Paul Dicker
4843173a00 Document why as_mut_ptr is safe 2019-11-30 12:57:50 +01:00
Ralf Jung
02b66a1901 libunwind_panic: adjust miri panic hack 2019-11-30 10:13:25 +01:00
David Tolnay
f34990e9b5
Remove unneeded prelude imports in libcore tests
These three lines are from c82da7a54b in
2015.

They cause problems when applying rustfmt to the codebase, because
reordering wildcard imports can trigger new unused import warnings.

As a minimized example, the following program compiles successfully:

    #![deny(unused_imports)]

    use std::fmt::Debug;
    use std::marker::Send;

    pub mod repro {
        use std::prelude::v1::*;
        use super::*;

        pub type D = dyn Debug;
        pub type S = dyn Send;
    }

    pub type S = dyn Send;

but putting it through rustfmt produces a program that fails to compile:

    #![deny(unused_imports)]

    use std::fmt::Debug;
    use std::marker::Send;

    pub mod repro {
        use super::*;
        use std::prelude::v1::*;

        pub type D = dyn Debug;
        pub type S = dyn Send;
    }

    pub type S = dyn Send;

The error is:

    error: unused import: `std::prelude::v1::*`
     --> src/main.rs:8:9
      |
    8 |     use std::prelude::v1::*;
      |         ^^^^^^^^^^^^^^^^^^^
2019-11-29 23:16:46 -08:00
David Tolnay
28eb31f8dc
Make libcore/unicode/tables.rs compatible with rustfmt 2019-11-29 20:17:11 -08:00
David Tolnay
f4cff27792
Make libcore/unicode/printable.rs compatible with rustfmt 2019-11-29 20:17:10 -08:00
David Tolnay
d353a4c267
Make dec2flt_table compatible with rustfmt 2019-11-29 20:17:09 -08:00
Ralf Jung
0b1b36ccb6
Rollup merge of #66872 - Mikotochan:patch-1, r=jonas-schievink
Minor documentation fix

Fixed the documentation for any as is a trait rather than a type.
2019-11-29 22:57:44 +01:00
Ralf Jung
395937823c
Rollup merge of #66837 - ohadravid:epsilon-doc, r=dtolnay
Clarify `{f32,f64}::EPSILON` docs

The doc for `EPSILON` says:
>  This is the difference between `1.0` and the next **largest** representable number.

Which is a bit unclear.

[Wikipedia](https://en.wikipedia.org/wiki/Machine_epsilon) says
> Machine epsilon is defined as the difference between 1 and the next **larger** floating point number

So this PR update the docs to match the Wikipedia version.

The original PR also has this in a [comment](https://github.com/rust-lang/rust/pull/50919#discussion_r192600209).
2019-11-29 22:57:41 +01:00
Ralf Jung
56203be06f
Rollup merge of #66766 - RalfJung:panic-comments, r=SimonSapin
Panic machinery comments and tweaks

This is mostly more comments, but I also renamed some things:
* `BoxMeUp::box_me_up` is not terribly descriptive, and since this is a "take"-style method (the argument is `&mut self` but the return type is fully owned, even though you can't tell from the type) I chose a name involving "take".
* `continue_panic_fmt` was very confusing as it was entirely unclear what was being continued -- for some time I thought "continue" might be the same as "resume" for a panic, but that's something entirely different. So I renamed this to `begin_panic_handler`, matching the `begin_panic*` theme of the other entry points.

r? @Dylan-DPC @SimonSapin
2019-11-29 22:57:33 +01:00
Ralf Jung
764ef8c81f
Rollup merge of #66379 - CreepySkeleton:patch-1, r=RalfJung
Rephrase docs in for ptr

These methods can be supplied with NULL just fine, this is the whole point of `Option<&T>` return type.
2019-11-29 22:57:28 +01:00
Mikotochan
26e5fd4c96
Minor documentation fix
Fixed the documentation for any as is a trait rather than a type.
2019-11-29 20:47:16 +02:00
Ohad Ravid
85a468b8cf Clarify {f32,f64}::EPSILON docs 2019-11-28 13:49:58 +01:00
bors
96ad8e5fbc Auto merge of #65013 - petertodd:2019-maybeuninit-debug, r=sfackler
Implement Debug for MaybeUninit

Precedent: `UnsafeCell` implements `Debug` even though it can't actually display the value. I noticed this omission while writing the following:

```
#[derive(Debug)]
 pub struct SliceInitializer<'a, T> {
    marker: PhantomData<&'a mut T>,
    uninit: &'a mut [MaybeUninit<T>],
    written: usize,
}
```

...which currently unergonomically fails to compile.

`UnsafeCell` does require `T: Debug`. Because of things like the above I think it'd be better to leave that requirement off. In fact, I'd also suggest removing that requirement for `UnsafeCell` too, which again I noticed in some low-level real world code.
2019-11-28 03:41:29 +00:00
Tyler Mandry
999fd561ba
Rollup merge of #66798 - bwignall:typo, r=varkor
Fix spelling typos

Should be non-semantic.

Uses https://en.wikipedia.org/wiki/Wikipedia:Lists_of_common_misspellings/For_machines to find likely typos.
2019-11-27 15:28:53 -06:00
Tyler Mandry
d1cc4c3096
Rollup merge of #66797 - mlodato517:mlodato517-array-doc-typo, r=Dylan-DPC
Fixes small typo in array docs r? @steveklabnik

Fixes a small typo in the array documentation.

Also, wasn't sure which [message](https://github.com/rust-lang/rust/blob/master/CONTRIBUTING.md#pull-requests) to put this in, and will definitely update the commit message if it is supposed to be the PR description but for "safety" - r? @steveklabnik
2019-11-27 15:28:51 -06:00
Tyler Mandry
4c51d58de0
Rollup merge of #66769 - fusion-engineering-forks:tau-constant, r=dtolnay
Add core::{f32,f64}::consts::TAU.

### **`τ`**
2019-11-27 15:28:47 -06:00
CreepySkeleton
f11dd32f75 Use intra-doc links 2019-11-27 21:36:09 +03:00
CreepySkeleton
d411dd27bf Elaborate on std::ptr::{as_ref,as_mod} and clarify docs 2019-11-27 21:33:24 +03:00
Dylan DPC
ce9b6972c2
Update mod.rs 2019-11-27 10:27:30 +01:00
David Tolnay
95e00bfed8
Format libcore with rustfmt
This commit applies rustfmt with default settings to files in
src/libcore *that are not involved in any currently open PR* to minimize
merge conflicts. The list of files involved in open PRs was determined
by querying GitHub's GraphQL API with this script:
https://gist.github.com/dtolnay/aa9c34993dc051a4f344d1b10e4487e8

With the list of files from the script in `outstanding_files`, the
relevant commands were:

    $ find src/libcore -name '*.rs' | xargs rustfmt --edition=2018
    $ rg libcore outstanding_files | xargs git checkout --

Repeating this process several months apart should get us coverage of
most of the rest of libcore.
2019-11-26 23:02:11 -08:00
Brian Wignall
16fabd8efd Fix spelling typos 2019-11-26 22:19:54 -05:00
Mark Lodato
9dc3f4b05b Fixes small typo in array docs r? @steveklabnik 2019-11-26 21:04:28 -05:00
Mara Bos
d220ed4fd7 Add tracking issue number. 2019-11-26 16:32:46 +01:00
Mara Bos
fd9b986bfe Add core::{f32,f64}::consts::TAU. 2019-11-26 16:32:46 +01:00
Guanqun Lu
55d725884b follow the same function order in the trait
This removes several warnings in IDE.
2019-11-26 22:55:38 +08:00
Ralf Jung
3e96ca2bf7 abort on BoxMeUp misuse 2019-11-26 09:24:39 +01:00
Ralf Jung
3c48579551 more panicking comments 2019-11-25 23:55:54 +01:00
Pietro Albini
30599d765b
Rollup merge of #66694 - RalfJung:panic-comments, r=Dylan-DPC
Add some comments to panic runtime
2019-11-25 15:05:26 +01:00
Ralf Jung
08f779cb4b better comment and rename BoxMeUp::box_me_up to take_box 2019-11-25 12:16:08 +01:00
Ralf Jung
6440b94253 make comment compile 2019-11-24 13:15:22 +01:00
Ralf Jung
35ee6bd59b panicking comments 2019-11-24 11:26:07 +01:00
bors
7d761fe046 Auto merge of #66322 - lzutao:consistent-result-map_or_else, r=dtolnay
Stabilize Result::map_or_else

Stabilized this API:
```rust
impl<T, E> Result<T, E> {
    pub fn map_or_else<U, D: FnOnce(E) -> U, F: FnOnce(T) -> U>(self, default: D, f: F) -> U {
        match self {
            Ok(t) => f(t),
            Err(e) => default(e),
        }
    }
}
```

Closes #53268
r? @SimonSapin
2019-11-24 07:37:01 +00:00
Mazdak Farrokhzad
d22bf91320
Rollup merge of #66659 - Centril:fix-bench, r=Mark-Simulacrum
make `./x.py bench` again

Fixes #54016
2019-11-24 03:17:03 +01:00
Mazdak Farrokhzad
9b0427fc94
Rollup merge of #66411 - RalfJung:forget, r=sfackler
mem::forget docs: mention ManuallyDrop

Cc @SimonSapin @Centril
2019-11-24 03:16:59 +01:00
Paul Dicker
3b1c742e23 Add as_mut_ptr method to atomic types. 2019-11-23 17:24:14 +01:00
Mazdak Farrokhzad
59257e6e88 make ./x.py bench again 2019-11-23 07:06:27 +01:00
Mazdak Farrokhzad
8024e0df4b
Rollup merge of #66583 - Phlosioneer:patch-2, r=Dylan-DPC
Clarify Step Documentation

While the redesign is in progress (#62886), clarify the purpose of replace_zero and replace_one.

First, "returning itself" is technically impossible due to the function signature of &mut self -> Self. A clone or copy operation must be used. So this is now explicitly stated in the documentation.

Second, the added docs give some guidance about the actual contract around implementation of replace_zero and replace one. Specifically, the only usage is to create a range with no more steps, by setting start to replace_one and end to replace_zero. So the only property that is actually used is `replace_one > replace_zero`. See https://github.com/rust-lang/rust/issues/42168#issuecomment-489554232

The new documentation does not say that is the *only* contract, and so it should not be considered an api change. It just highlights the most important detail for implementors.

The redesign doesn't seem to be landing any time soon, so this is a stopgap measure to reduce confusion in the meantime.
2019-11-23 02:22:49 +01:00
Mazdak Farrokhzad
0ae4a19cf3
Rollup merge of #65961 - lcnr:typename_of, r=Dylan-DPC
add fn type_name_of_val

This function is often useful during testing and mirrors `align_of_val` and `size_of_val`.

# Example

Showing the default type of integers.

```rust
let x = 7;
println!("per default, integers have the type: {}", std::any::type_name_of_val(&x));
```

To my knowledge this can currently not be done without defining a function similar to `type_name_of_val`.
2019-11-23 02:22:44 +01:00
Mazdak Farrokhzad
a699945ead
Rollup merge of #66619 - guanqun:use-third-person-singular-verb, r=Centril
follow the convention in this file to use third-person singular verbs
2019-11-22 19:57:51 +01:00
Mazdak Farrokhzad
afc78e19dd
Rollup merge of #66566 - robamler:issue-66476, r=rkruppe
Document pitfall with `impl PartialEq<B> for A`

Fixes #66476 by turning the violating example into an explicit
counterexample.
2019-11-22 19:57:46 +01:00
Guanqun Lu
da5539cf7c follow the convention in this file to use third-person singular verbs 2019-11-22 15:37:11 +08:00
Robert Bamler
5028fd8ab9 Document pitfall with impl PartialEq<B> for A
Fixes #66476 by turning the violating example into an explicit
counterexample.
2019-11-21 23:16:44 -08:00
Mazdak Farrokhzad
089229a193 Redefine core::convert::Infallible as !. 2019-11-21 14:55:33 +01:00
Mazdak Farrokhzad
15c30ddd69 Stabilize the never_type, written !. 2019-11-21 14:55:32 +01:00
Phlosioneer
983cae77dd
Clarify Step Documentation
While the redesign is in progress (#62886), clarify the purpose of replace_zero and replace_one.
2019-11-20 14:40:54 -05:00