Commit Graph

122174 Commits

Author SHA1 Message Date
Ralf Jung
098949b504
Rollup merge of #73130 - wesleywiser:remove_const_prop_for_indirects, r=oli-obk
Remove const prop for indirects

This was only used by one mir-opt test and since it causes buggy behavior under `-Zmir-opt-level=2`, it seems like we should remove it.

This was split out from #71946.

Closes #72679
Closes #72372
Closes #72285
2020-06-19 08:56:06 +02:00
Ralf Jung
ea3c309700
Rollup merge of #72999 - mati865:separate-self-contained-dir, r=Mark-Simulacrum
Create self-contained directory and move there some of external binaries/libs

One of the steps to reach design described in https://github.com/rust-lang/rust/issues/68887#issuecomment-633048380
This PR moves things around and allows link code to handle the new directory structure.
2020-06-19 08:56:04 +02:00
Ralf Jung
5e7eec2eaa
Rollup merge of #72497 - RalfJung:tag-term, r=oli-obk
tag/niche terminology cleanup

The term "discriminant" was used in two ways throughout the compiler:
* every enum variant has a corresponding discriminant, that can be given explicitly with `Variant = N`.
* that discriminant is then encoded in memory to store which variant is active -- but this encoded form of the discriminant was also often called "discriminant", even though it is conceptually quite different (e.g., it can be smaller in size, or even use niche-filling).

After discussion with @eddyb, this renames the second term to "tag". The way the tag is encoded can be either `TagEncoding::Direct` (formerly `DiscriminantKind::Tag`) or `TagEncoding::Niche` (formerly `DiscrimianntKind::Niche`).

This finally resolves some long-standing confusion I had about the handling of variant indices and discriminants, which surfaced in https://github.com/rust-lang/rust/pull/72419.

(There is also a `DiscriminantKind` type in libcore, it remains unaffected. I think this corresponds to the discriminant, not the tag, so that seems all right.)

r? @eddyb
2020-06-19 08:56:02 +02:00
Ralf Jung
99be102a6d
Rollup merge of #72486 - Ralith:asinh-fix, r=dtolnay
Fix asinh of negative values

Rust's current implementation of asinh has [large errors](https://www.wolframalpha.com/input/?i=arcsinh%28x%29%2C+ln%28x%2B%28x%5E2%2B1%29%5E0.5%29%2C+x+from+-67452095.07139316+to+0) in its negative range. ~These are (mostly) not numerical, but rather seem due to an incorrect implementation.~ This appears to be due to avoidable catastrophic cancellation.
[Playground before/after](https://play.rust-lang.org/?version=stable&mode=debug&edition=2018&gist=bd04ae6d86d06612e4e389a8b95d19ab).
[glibc uses](81dca813cc/sysdeps/ieee754/dbl-64/s_asinh.c (L56)) abs here.

Many thanks to @danieldeankon for finding this weird behavior, @jebrosen for diagnosing it, and @toasteater for identifying the probable implementation error!
2020-06-19 08:55:59 +02:00
Ralf Jung
9c54c65c9d
Rollup merge of #72331 - oddg:forbid-cast-of-cenum-implementing-drop, r=matthewjasper,nikomatsakis
Report error when casting an C-like enum implementing Drop

Following approach described in https://github.com/rust-lang/rust/issues/35941
2020-06-19 08:55:57 +02:00
Ralf Jung
27d4737ef9
Rollup merge of #70740 - haraldh:static-pie, r=petrochenkov
Enabling static-pie for musl

and make it the default for the x86_64-unknown-linux-musl target

This is a quick implementation for https://github.com/rust-lang/rust/issues/70693

Opening it as a draft PR to gather some feedback, before I put more work in it.

```console
❯ cat hello.rs
fn main() {
    println!("main = {:#x}", &main as *const _ as usize);
}

❯  /tmp/rust-musl/bin/rustc  --target x86_64-unknown-linux-musl  ~/hello.rs

❯ ldd hello
	statically linked

❯ file hello
hello: ELF 64-bit LSB shared object, x86-64, version 1 (GNU/Linux), statically linked, BuildID[sha1]=fec5cdc170f503a712a63a6958691ce5ce433654, with debug_info, not stripped

❯ ./hello
main = 0x7f233ca30008

❯ ./hello
main = 0x7f9ddc529008

❯ ./hello
main = 0x7f1e5a224008

❯ ./hello
main = 0x7f4485c7c008

❯ /tmp/rust-musl/bin/rustc  --target x86_64-unknown-linux-musl  -Z print-link-args  ~/hello.rs
"cc" "-Wl,--as-needed" "-Wl,-z,noexecstack" "-Wl,--eh-frame-hdr" "-m64" "-nostdlib" "/tmp/rust-musl/lib/rustlib/x86_64-unknown-linux-musl/lib/rcrt1.o" "/tmp/rust-musl/lib/rustlib/x86_64-unknown-linux-musl/lib/crti.o" "-L" "/tmp/rust-musl/lib/rustlib/x86_64-unknown-linux-musl/lib" "hello.hello.7rcbfp3g-cgu.0.rcgu.o" "hello.hello.7rcbfp3g-cgu.1.rcgu.o" "hello.hello.7rcbfp3g-cgu.2.rcgu.o" "hello.hello.7rcbfp3g-cgu.3.rcgu.o" "hello.hello.7rcbfp3g-cgu.4.rcgu.o" "hello.hello.7rcbfp3g-cgu.5.rcgu.o" "-o" "hello" "hello.1nxjf9so94czdgcz.rcgu.o" "-Wl,--gc-sections" "-static-pie" "-Wl,-zrelro" "-Wl,-znow" "-nodefaultlibs" "-L" "/tmp/rust-musl/lib/rustlib/x86_64-unknown-linux-musl/lib" "-Wl,--start-group" "-Wl,-Bstatic" "/tmp/rust-musl/lib/rustlib/x86_64-unknown-linux-musl/lib/libstd-0f9cb7646f9e2c34.rlib" "/tmp/rust-musl/lib/rustlib/x86_64-unknown-linux-musl/lib/libpanic_unwind-ba857f2f2e4e7187.rlib" "/tmp/rust-musl/lib/rustlib/x86_64-unknown-linux-musl/lib/libhashbrown-58ba5e25bbdf9d29.rlib" "/tmp/rust-musl/lib/rustlib/x86_64-unknown-linux-musl/lib/librustc_std_workspace_alloc-886bfe43afa847dc.rlib" "/tmp/rust-musl/lib/rustlib/x86_64-unknown-linux-musl/lib/libbacktrace-fbfb8fe99f19a67b.rlib" "/tmp/rust-musl/lib/rustlib/x86_64-unknown-linux-musl/lib/libbacktrace_sys-85fa859e7d364cc9.rlib" "/tmp/rust-musl/lib/rustlib/x86_64-unknown-linux-musl/lib/librustc_demangle-07ab026cd3ec0d82.rlib" "/tmp/rust-musl/lib/rustlib/x86_64-unknown-linux-musl/lib/libunwind-a8ec5932d92ea864.rlib" "/tmp/rust-musl/lib/rustlib/x86_64-unknown-linux-musl/lib/libcfg_if-0ba4cc2f38a198d5.rlib" "/tmp/rust-musl/lib/rustlib/x86_64-unknown-linux-musl/lib/liblibc-c1bb2b3ce4f78b7c.rlib" "/tmp/rust-musl/lib/rustlib/x86_64-unknown-linux-musl/lib/liballoc-0ff673c1cf0d451a.rlib" "/tmp/rust-musl/lib/rustlib/x86_64-unknown-linux-musl/lib/librustc_std_workspace_core-c8ff2001db856926.rlib" "/tmp/rust-musl/lib/rustlib/x86_64-unknown-linux-musl/lib/libcore-2ae14177140eeca2.rlib" "-Wl,--end-group" "/tmp/rust-musl/lib/rustlib/x86_64-unknown-linux-musl/lib/libcompiler_builtins-4fd81b5ce1b08a9c.rlib" "-static" "-Wl,-Bdynamic" "/tmp/rust-musl/lib/rustlib/x86_64-unknown-linux-musl/lib/crtn.o"
```

Closes https://github.com/rust-lang/rust/issues/70693
Closes https://github.com/rust-lang/rust/issues/53968
2020-06-19 08:55:55 +02:00
Benjamin Saunders
35a2915bf3 Remove now-redundant branch 2020-06-18 18:52:26 -07:00
bors
a39c7787ba Auto merge of #73486 - Manishearth:rollup-11iyqpc, r=Manishearth
Rollup of 17 pull requests

Successful merges:

 - #70551 (Make all uses of ty::Error delay a span bug)
 - #71338 (Expand "recursive opaque type" diagnostic)
 - #71976 (Improve diagnostics for `let x += 1`)
 - #72279 (add raw_ref macros)
 - #72628 (Add tests for 'impl Default for [T; N]')
 - #72804 (Further tweak lifetime errors involving `dyn Trait` and `impl Trait` in return position)
 - #72814 (remove visit_terminator_kind from MIR visitor)
 - #72836 (Complete the std::time documentation to warn about the inconsistencies between OS)
 - #72968 (Only highlight doc search results via mouseover if mouse has moved)
 - #73034 (Export `#[inline]` fns with extern indicators)
 - #73315 (Clean up some weird command strings)
 - #73320 (Make new type param suggestion more targetted)
 - #73361 (Tweak "non-primitive cast" error)
 - #73425 (Mention functions pointers in the documentation)
 - #73428 (Fix typo in librustc_ast docs)
 - #73447 (Improve document for `Result::as_deref(_mut)` methods)
 - #73476 (Added tooltip for should_panic code examples)

Failed merges:

r? @ghost
2020-06-19 01:20:49 +00:00
Aman Arora
3659406c51 Refactor hir::Place
For the following code
```rust
let c = || bar(foo.x, foo.x)
```

We generate two different `hir::Place`s for both `foo.x`.
Handling this adds overhead for analysis we need to do for RFC 2229.

We also want to store type information at each Projection to support
analysis as part of the RFC. This resembles what we have for
`mir::Place`

This commit modifies the Place as follows:
- Rename to `PlaceWithHirId`, where there `hir_id` is that of the
expressioin.
- Move any other information that describes the access out to another
struct now called `Place`.
- Removed `Span`, it can be accessed using the [hir
API](https://doc.rust-lang.org/nightly/nightly-rustc/rustc_middle/hir/map/struct.Map.html#method.span)
- Modify `Projection` to be a strucutre of its own, that currently only
contains the `ProjectionKind`.

Adding type information to projections wil be completed as part of https://github.com/rust-lang/project-rfc-2229/issues/5

Closes https://github.com/rust-lang/project-rfc-2229/issues/3

Co-authored-by: Aman Arora <me@aman-arora.com>
Co-authored-by: Roxane Fruytier <roxane.fruytier@hotmail.com>
2020-06-18 18:59:38 -04:00
Manish Goregaokar
6c53a0c2b5
Rollup merge of #73476 - JakobDegen:should_panic_rustdoc, r=GuillaumeGomez
Added tooltip for should_panic code examples

This change adds a tooltip to the documentation for `should_panic` examples. It currently displays identically to `compile_fail` examples, save for the changed text. It may be helpful to change the color that this displays in to make it visually more clear what is going on, but I'm unsure if additional colors wouldn't just be distracting.

I brought this [up on internals](https://internals.rust-lang.org/t/indicating-that-an-example-is-should-panic-in-docs/12544) a few days ago, and there seemed to be a mild positive response to it.
2020-06-18 15:21:04 -07:00
Manish Goregaokar
f15b346f3a
Rollup merge of #73447 - lzutao:stabilize-result_as_deref, r=dtolnay
Improve document for `Result::as_deref(_mut)` methods

cc #50264
2020-06-18 15:21:03 -07:00
Manish Goregaokar
1db7dc4794
Rollup merge of #73428 - pierwill:patch-1, r=jonas-schievink
Fix typo in librustc_ast docs

Fixed sentence by removing a word.
2020-06-18 15:21:01 -07:00
Manish Goregaokar
9f8f994ad9
Rollup merge of #73425 - poliorcetics:zeroed-functions-pointers, r=dtolnay
Mention functions pointers in the documentation

Fixes #51615.

This mentions function pointers in the documentation for `core::mem::zeroed`, adding them to the list of types that are **always** wrong when zeroed, with `&T` and `&mut T`.

@rustbot modify labels: T-doc, C-enhancement, T-libs
2020-06-18 15:20:59 -07:00
Manish Goregaokar
9ca811772c
Rollup merge of #73361 - estebank:non-primitive-cast, r=davidtwco
Tweak "non-primitive cast" error

- Suggest borrowing expression if it would allow cast to work.
- Suggest using `<Type>::from(<expr>)` when appropriate.
- Minor tweak to `;` typo suggestion.

Partily address #47136.
2020-06-18 15:20:57 -07:00
Manish Goregaokar
f4b5f581a9
Rollup merge of #73320 - estebank:type-param-sugg-more, r=davidtwco
Make new type param suggestion more targetted

Do not suggest new type param when encountering a missing type in an ADT
field with generic parameters.

Fix #72640.
2020-06-18 15:20:55 -07:00
Manish Goregaokar
ed92b6a633
Rollup merge of #73315 - GuillaumeGomez:clean-up-config-strs, r=kinnison
Clean up some weird command strings

r? @kinnison
2020-06-18 15:20:53 -07:00
Manish Goregaokar
0e332e9e3c
Rollup merge of #73034 - doctorn:nomangle-inline-linkage, r=matthewjasper
Export `#[inline]` fns with extern indicators

In ancient history (#36280) we stopped `#[inline]` fns being codegened if they weren't used. However,

- #72944
- #72463

observe that when writing something like

```rust
#![crate_type = "cdylib"]

#[no_mangle]
#[inline]
pub extern "C" fn foo() {
    // ...
}
```

we really _do_ want `foo` to be codegened. This change makes this the case.

Resolves #72944, resolves #72463 (and maybe some more)
2020-06-18 15:20:51 -07:00
Manish Goregaokar
bf59152c01
Rollup merge of #72968 - integer32llc:docs-arrow-keys, r=GuillaumeGomez
Only highlight doc search results via mouseover if mouse has moved

## What happens

- Go to https://doc.rust-lang.org/stable/std/index.html
- Put your mouse cursor somewhere in the middle where search results will appear and then don't move the mouse
- Press 's' to focus the search box
- Type a query that brings up enough search results to go under where your mouse cursor is
- Press the down arrow
- The search result that is one below where your mouse cursor is will be highlighted.

## What I expected

When not currently using the mouse, I expect doing a search and then pressing the down arrow to always highlight the first search result immediately below the search box.

## The fix

This feels a bit hacky to me; I'm open to other solutions. This introduces a global JS var that keeps track of whether the person searching has moved their mouse after doing a search or not, and only uses the mouse position to highlight search results if the person HAS moved the mouse AFTER doing a search.
2020-06-18 15:20:49 -07:00
Manish Goregaokar
e1549786ff
Rollup merge of #72836 - poliorcetics:std-time-os-specificities, r=shepmaster
Complete the std::time documentation to warn about the inconsistencies between OS

Fixes #48980.

I put the new documentation in `src/libstd/time.rs` at the module-level because it affects all types, even the one that are not directly system dependents if they are used with affected types, but there may be a better place for it.
2020-06-18 15:20:47 -07:00
Manish Goregaokar
e0b59b2c07
Rollup merge of #72814 - RalfJung:mir-visir-terminator, r=oli-obk
remove visit_terminator_kind from MIR visitor

For some reason, we had both `visit_terminator` and `visit_terminator_kind`. In contrast, for `Statement` we just have `visit_statement`. So this cleans things up by removing `visit_terminator_kind` and porting its users to `visit_terminator`.
2020-06-18 15:20:45 -07:00
Manish Goregaokar
40fd2bdcfe
Rollup merge of #72804 - estebank:opaque-missing-lts-in-fn-2, r=nikomatsakis
Further tweak lifetime errors involving `dyn Trait` and `impl Trait` in return position

* Suggest substituting `'static` lifetime in impl/dyn `Trait + 'static` instead of `Trait + 'static + '_`
* When `'static` is explicit, also suggest constraining argument with it
* Reduce verbosity of suggestion message and mention lifetime in label
* Tweak output for overlapping required/captured spans
* Give these errors an error code

Follow up to #72543.

r? @nikomatsakis
2020-06-18 15:20:43 -07:00
Manish Goregaokar
9262fc2a68
Rollup merge of #72628 - MikailBag:array-default-tests, r=shepmaster
Add tests for 'impl Default for [T; N]'

Related: #71690.
This pull request adds two tests:
- Even it T::default() panics, no leaks occur.
- [T; 0] is Default even if T is not.

I believe at some moment `Default` impl for arrays will be rewritten to use const generics instead of macros, and these tests will help to prevent behavior changes.
2020-06-18 15:20:41 -07:00
Manish Goregaokar
49ab0cab61
Rollup merge of #72279 - RalfJung:raw-ref-macros, r=nikomatsakis
add raw_ref macros

In https://github.com/rust-lang/rust/issues/64490, various people were in favor of exposing `&raw` as a macro first before making the actual syntax stable. So this PR (unstably) introduces those macros.

I'll create the tracking issue if we're okay moving forward with this.
2020-06-18 15:20:39 -07:00
Manish Goregaokar
39f8784eb6
Rollup merge of #71976 - mibac138:let-recovery, r=estebank
Improve diagnostics for `let x += 1`

Fixes(?) #66736

The code responsible for the `E0404` errors is [here](https://github.com/rust-lang/rust/blob/master/src/librustc_parse/parser/ty.rs#L399-L424) which I don't think can be easily modified to prevent emitting an error in one specific case. Because of this I couldn't get rid of `E0404` and instead added `E0067` along with a help message which will fix the problem.

r? @estebank
2020-06-18 15:20:36 -07:00
Manish Goregaokar
45d033b21c
Rollup merge of #71338 - estebank:recursive-impl-trait, r=nikomatsakis
Expand "recursive opaque type" diagnostic

Fix #70968, partially address #66523.
2020-06-18 15:20:33 -07:00
Manish Goregaokar
9d388d465d
Rollup merge of #70551 - mark-i-m:ty-err-2, r=varkor
Make all uses of ty::Error delay a span bug

r? @eddyb

A second attempt at https://github.com/rust-lang/rust/pull/70245

resolves https://github.com/rust-lang/rust/issues/70866
2020-06-18 15:20:30 -07:00
bors
036b5fec49 Auto merge of #73446 - ecstatic-morse:issue-73431, r=pnkfelix
Make novel structural match violations not a `bug`

Fixes (on master) #73431.

Ideally, `CustomEq` would emit a strict subset of the structural match errors that are found by `search_for_structural_match_violation`, since it allows more cases due to value-based reasoning. However, const qualification is more conservative than `search_for_structural_match_violation` around associated constants, since qualification does not try to substitute type parameters.

In the long term, we should probably make const qualification work for generic associated constants, but I don't like extending its capabilities even further.

r? @pnkfelix
2020-06-18 21:50:45 +00:00
Eric Huss
5a9ff052b4 Disable core benches on wasm (benches not supported). 2020-06-18 14:48:53 -07:00
Esteban Küber
40b27ff5f3 review comments: add comment 2020-06-18 14:31:15 -07:00
Matthew Jasper
aa117047f0 Add helper method for reusing an existing interned region 2020-06-18 18:09:18 +01:00
Aaron Hill
e9b0ce8afa Add test for overflow when finding auto-trait impls in Rustdoc 2020-06-18 17:54:14 +01:00
Ivan Tham
111c2d27f5 Rearrange liballoc __impl_slice_eq1 2020-06-19 00:34:49 +08:00
Ivan Tham
ec8ff1cc24 Liballoc clean up macro_rules style 2020-06-19 00:34:20 +08:00
Ivan Tham
8aecafe8e8 Fix liballoc doc spelling 2020-06-19 00:33:24 +08:00
Eric Huss
abb5800dd5 Ensure std benchmarks get tested. 2020-06-18 09:11:15 -07:00
Jake Degen
721facf29c Removed trailing whitespace 2020-06-18 11:45:52 -04:00
Jake Degen
b805f2c4dc Added tooltip for should_panic code examples.
Previously, compile_fail and ignore code examples displayed a tooltip
indicating this in the documentation. This tooltip has now also been
added to should_panic examples.
2020-06-18 11:12:36 -04:00
Raoul Strackx
daedb7920f Prevent attacker from manipulating FPU tag word used in SGX enclave
Insufficient sanitization of the x87 FPU tag word in the trusted enclave runtime allowed unprivileged adversaries in the containing host application to induce incoherent or unexpected results for ABI-compliant compiled enclave application code that uses the x87 FPU.

Vulnerability was disclosed to us by Fritz Alder, Jo Van Bulck, David Oswald and Frank Piessens
2020-06-18 12:11:39 +02:00
qy3u
d134870bd4 Document format correction 2020-06-18 17:46:27 +08:00
bors
e55d3f9c52 Auto merge of #73384 - petrochenkov:gnulink, r=cuviper
linker: Never pass `-no-pie` to non-gnu linkers

Fixes https://github.com/rust-lang/rust/issues/73370
2020-06-18 04:29:23 +00:00
Lzu Tao
e5c5df8f9c Add specialization of ToString for char 2020-06-18 02:54:35 +00:00
Lzu Tao
4e77214583 Improve document for Result::as_deref(_mut) 2020-06-18 02:09:53 +00:00
Charles Lew
f633dd385f Implement crate level only lints checking. 2020-06-18 09:53:12 +08:00
bors
7d16c1d5f5 Auto merge of #73065 - Amanieu:tls-fix, r=oli-obk
Fix link error with #[thread_local] introduced by #71192

r? @oli-obk
2020-06-18 00:29:10 +00:00
David Tolnay
2da9ca72bc
Remove duplicate sentence fragment from mem::zeroed doc 2020-06-17 17:17:07 -07:00
Josh Stone
a7c2cf8f51 Reduce pointer casts in Box::into_boxed_slice
We only need to cast the pointer once to change `Box<T>` to an array
`Box<[T; 1]>`, then we can let unsized coercion return `Box<[T]>`.
2020-06-17 16:30:27 -07:00
Esteban Küber
8d1a3801fa review comments 2020-06-17 16:29:03 -07:00
Tomasz Miąsko
f488dfc2b6 Use alloc::Layout in DroplessArena API 2020-06-18 01:19:04 +02:00
Rich Kadel
36c9014ddd removed try config to test mac & windows (passed)
https://dev.azure.com/rust-lang/rust/_build/results?buildId=32224&view=results
2020-06-17 14:50:28 -07:00
matthewjasper
ba2ef58ae6 Unify region variables when projecting associated types
This is required to avoid cycles when evaluating auto trait
predicates.
2020-06-17 19:46:15 +01:00