Skip to content

Rollup of 10 pull requests - #82045

Merged
bors merged 30 commits into
rust-lang:masterfrom
Dylan-DPC-zz:rollup-244l0sb
Feb 13, 2021
Merged

Rollup of 10 pull requests#82045
bors merged 30 commits into
rust-lang:masterfrom
Dylan-DPC-zz:rollup-244l0sb

Conversation

@Dylan-DPC-zz

Copy link
Copy Markdown

Successful merges:

Failed merges:

r? @ghost
@rustbot modify labels: rollup

Create a similar rollup

sdroegeand others added 30 commits February 4, 2021 10:23
…t_unchecked` in `Zip` `TrustedRandomAccess` specialization
Otherwise if `Iterator::self.a.__iterator_get_unchecked` panics the
index would not have been incremented yet and another call to
`Iterator::next` would read from the same index again, which is not
allowed according to the API contract of `TrustedRandomAccess` for
`!Clone`.
Fixesrust-lang#81740
We now allow two new casts:
- mut array reference to mut ptr. Example:
let mut x: [usize; 2] = [0, 0];
let p = &mut x as *mut usize;
We allow casting const array references to const pointers so not
allowing mut references to mut pointers was inconsistent.
- mut array reference to const ptr. Example:
let mut x: [usize; 2] = [0, 0];
let p = &mut x as *const usize;
This was similarly inconsistent as we allow casting mut references to
const pointers.
Existing test 'vector-cast-weirdness' updated to test both cases.
Fixesrust-lang#24151
…yword
Unfortunately, this can't currently be tested. The problem is that we
need the file to be compiled first to then be used as dependency, which
cannot be done currently unfortunately in the rustdoc test suites.
Example:
```rust
// name this file "foo.rs"
/// ```
/// let x = foo::foo();
/// ```
pub fn foo() {}
```
If you run `rustdoc --test foo.rs`, you'll get:
```
running 1 test
test foo.rs - foo (line 1) ... FAILED
failures:
---- foo.rs - foo (line 1) stdout ----
error[E0463]: can't find crate for `foo`
--> foo.rs:0:1
|
2 | extern crate foo;
| ^^^^^^^^^^^^^^^^^ can't find crate
```
If a test were possible, it would look something like
````rust
#![crate_name = "mod"]
#![crate_type = "lib"]
//! ```
//! // NOTE: requires that the literal string 'mod' appears in the doctest for
//! // the bug to appear
//! assert_eq!(1, 1);
//! ```
````
Shorter code and by initializing to the final value directly, the variable
doesn't need to be mut.
Fix injected errors when running doctests on a crate named after a keyword
Closesrust-lang#79771
… r=matklad
Stabilize the partition_point feature
Stabilize the partition_point feature.
Tracking Issue: rust-lang#73831
First PR: rust-lang#73577
Allow casting mut array ref to mut ptr
Allow casting mut array ref to mut ptr
We now allow two new casts:
- mut array reference to mut ptr. Example:
let mut x: [usize; 2] = [0, 0];
let p = &mut x as *mut usize;
We allow casting const array references to const pointers so not
allowing mut references to mut pointers was inconsistent.
- mut array reference to const ptr. Example:
let mut x: [usize; 2] = [0, 0];
let p = &mut x as *const usize;
This was similarly inconsistent as we allow casting mut references to
const pointers.
Existing test 'vector-cast-weirdness' updated to test both cases.
Fixesrust-lang#24151
HWAddressSanitizer support
# Motivation
Compared to regular ASan, HWASan has a [smaller overhead](https://source.android.com/devices/tech/debug/hwasan). The difference in practice is that HWASan'ed code is more usable, e.g. Android device compiled with HWASan can be used as a daily driver.
# Example
```
fn main() {
let xs = vec![0, 1, 2, 3];
let _y = unsafe { *xs.as_ptr().offset(4) };
}
```
```
==223==ERROR: HWAddressSanitizer: tag-mismatch on address 0xefdeffff0050 at pc 0xaaaad00b3468
READ of size 4 at 0xefdeffff0050 tags: e5/00 (ptr/mem) in thread T0
#0 0xaaaad00b3464 (/root/main+0x53464)
rust-lang#1 0xaaaad00b39b4 (/root/main+0x539b4)
rust-lang#2 0xaaaad00b3dd0 (/root/main+0x53dd0)
rust-lang#3 0xaaaad00b61dc (/root/main+0x561dc)
rust-lang#4 0xaaaad00c0574 (/root/main+0x60574)
rust-lang#5 0xaaaad00b6290 (/root/main+0x56290)
rust-lang#6 0xaaaad00b6170 (/root/main+0x56170)
rust-lang#7 0xaaaad00b3578 (/root/main+0x53578)
rust-lang#8 0xffff81345e70 (/lib64/libc.so.6+0x20e70)
rust-lang#9 0xaaaad0096310 (/root/main+0x36310)
[0xefdeffff0040,0xefdeffff0060) is a small allocated heap chunk; size: 32 offset: 16
0xefdeffff0050 is located 0 bytes to the right of 16-byte region [0xefdeffff0040,0xefdeffff0050)
allocated here:
#0 0xaaaad009bcdc (/root/main+0x3bcdc)
rust-lang#1 0xaaaad00b1eb0 (/root/main+0x51eb0)
rust-lang#2 0xaaaad00b20d4 (/root/main+0x520d4)
rust-lang#3 0xaaaad00b2800 (/root/main+0x52800)
rust-lang#4 0xaaaad00b1cf4 (/root/main+0x51cf4)
rust-lang#5 0xaaaad00b33d4 (/root/main+0x533d4)
rust-lang#6 0xaaaad00b39b4 (/root/main+0x539b4)
rust-lang#7 0xaaaad00b61dc (/root/main+0x561dc)
rust-lang#8 0xaaaad00b3578 (/root/main+0x53578)
rust-lang#9 0xaaaad0096310 (/root/main+0x36310)
Thread: T0 0xeffe00002000 stack: [0xffffc0590000,0xffffc0d90000) sz: 8388608 tls: [0xffff81521020,0xffff815217d0)
Memory tags around the buggy address (one tag corresponds to 16 bytes):
0xfefcefffef80: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
0xfefcefffef90: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
0xfefcefffefa0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
0xfefcefffefb0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
0xfefcefffefc0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
0xfefcefffefd0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
0xfefcefffefe0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
0xfefcefffeff0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
=>0xfefceffff000: a2 a2 05 00 e5 [00] 00 00 00 00 00 00 00 00 00 00
0xfefceffff010: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
0xfefceffff020: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
0xfefceffff030: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
0xfefceffff040: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
0xfefceffff050: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
0xfefceffff060: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
0xfefceffff070: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
0xfefceffff080: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
Tags for short granules around the buggy address (one tag corresponds to 16 bytes):
0xfefcefffeff0: .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. ..
=>0xfefceffff000: .. .. c5 .. .. [..] .. .. .. .. .. .. .. .. .. ..
0xfefceffff010: .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. ..
See https://clang.llvm.org/docs/HardwareAssistedAddressSanitizerDesign.html#short-granules for a description of short granule tags
Registers where the failure occurred (pc 0xaaaad00b3468):
x0 e500efdeffff0050 x1 0000000000000004 x2 0000ffffc0d8f5a0 x3 0200efff00000000
x4 0000ffffc0d8f4c0 x5 000000000000004f x6 00000ffffc0d8f36 x7 0000efff00000000
x8 e500efdeffff0050 x9 0200efff00000000 x10 0000000000000000 x11 0200efff00000000
x12 0200effe000006b0 x13 0200effe000006b0 x14 0000000000000008 x15 00000000c00000cf
x16 0000aaaad00a0afc x17 0000000000000003 x18 0000000000000001 x19 0000ffffc0d8f718
x20 ba00ffffc0d8f7a0 x21 0000aaaad00962e0 x22 0000000000000000 x23 0000000000000000
x24 0000000000000000 x25 0000000000000000 x26 0000000000000000 x27 0000000000000000
x28 0000000000000000 x29 0000ffffc0d8f650 x30 0000aaaad00b3468
```
# Comments/Caveats
* HWASan is only supported on arm64.
* I'm not sure if I should add a feature gate or piggyback on the existing one for sanitizers.
* HWASan requires `-C target-feature=+tagged-globals`. That flag should probably be set transparently to the user. Not sure how to go about that.
# TODO
* Need more tests.
* Update documentation.
* Fix symbolization.
* Integrate with CI
…pecialization-panic-safety, r=KodrAus
Increment `self.index` before calling `Iterator::self.a.__iterator_ge…
…`t_unchecked` in `Zip` `TrustedRandomAccess` specialization
Otherwise if `Iterator::self.a.__iterator_get_unchecked` panics the
index would not have been incremented yet and another call to
`Iterator::next` would read from the same index again, which is not
allowed according to the API contract of `TrustedRandomAccess` for
`!Clone`.
Fixesrust-lang#81740
use RWlock when accessing os::env
Multiple threads modifying the current process environment is fairly uncommon. Optimize for the more common read case.
r? ````@m-ou-se````
…komatsakis
GAT/const_generics: Allow with_opt_const_param to return GAT param def_id
Fixesrust-lang#75415Fixesrust-lang#79666
cc ```@lcnr```
I've absolutely no idea who to r? for this...
Push a `char` instead of a `str` with len one into a String
``@rustbot`` modify labels +C-cleanup +T-compiler
Remove unnecessary lint allow attrs on example
It seems they are not needed anymore.
Use `Iterator::all` instead of open-coding it
Shorter code and by initializing to the final value directly, the variable
doesn't need to be mut.
@rustbotrustbot added the rollup A PR which is a rollup label Feb 12, 2021
@Dylan-DPC-zz

Copy link
Copy Markdown
Author

@bors r+ rollup=never p=5

@bors

bors commented Feb 12, 2021

Copy link
Copy Markdown
Collaborator

📌 Commit 1ef566f has been approved by Dylan-DPC

@borsbors added the S-waiting-on-bors Status: Waiting on bors to run and complete tests. Bors will change the label on completion. label Feb 12, 2021
@bors

bors commented Feb 12, 2021

Copy link
Copy Markdown
Collaborator

⌛ Testing commit 1ef566f with merge ced38f1435f68c38baceadf39ba8e6254bcf5371...

@bors

bors commented Feb 13, 2021

Copy link
Copy Markdown
Collaborator

💥 Test timed out

@borsbors added S-waiting-on-review Status: Awaiting review from the assignee but also interested parties. and removed S-waiting-on-bors Status: Waiting on bors to run and complete tests. Bors will change the label on completion. labels Feb 13, 2021
@Dylan-DPC-zz

Copy link
Copy Markdown
Author

@bors retry

@borsbors added S-waiting-on-bors Status: Waiting on bors to run and complete tests. Bors will change the label on completion. and removed S-waiting-on-review Status: Awaiting review from the assignee but also interested parties. labels Feb 13, 2021
@bors

bors commented Feb 13, 2021

Copy link
Copy Markdown
Collaborator

⌛ Testing commit 1ef566f with merge 21cbbdc...

@rust-log-analyzer

Copy link
Copy Markdown
Collaborator

A job failed! Check out the build log: (web)(plain)

Click to see the possible cause of the failure (guessed by this bot)

@bors

bors commented Feb 13, 2021

Copy link
Copy Markdown
Collaborator

☀️ Test successful - checks-actions
Approved by: Dylan-DPC
Pushing 21cbbdc to master...

@borsbors added the merged-by-bors This PR was explicitly merged by bors. label Feb 13, 2021
@bors
bors merged commit 21cbbdc into rust-lang:masterFeb 13, 2021
@rustbotrustbot added this to the 1.52.0 milestone Feb 13, 2021
@Dylan-DPC-zz
Dylan-DPC-zz deleted the rollup-244l0sb branch February 13, 2021 11:11
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

merged-by-borsThis PR was explicitly merged by bors.rollupA PR which is a rollupS-waiting-on-borsStatus: Waiting on bors to run and complete tests. Bors will change the label on completion.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

13 participants

@Dylan-DPC-zz@bors@rust-log-analyzer@rustbot@sdroege@the8472@BoxyUwU@osa1@jyn514@LingMan@MikailBag@VillSnow@Dylan-DPC