Commit graph

31118 commits

Author SHA1 Message Date
Manish Goregaokar
0eadeda945
Rollup merge of #74000 - lcnr:lazy_normalisation_consts, r=varkor
add `lazy_normalization_consts` feature gate

In #71973 I underestimated the amount of code which is influenced by lazy normalization of consts
and decided against having a separate feature flag for this.

Looking a bit more into this, the following issues are already working with lazy norm in its current state #47814 #57739 #73980

I therefore think it is worth it to enable lazy norm separately. Note that `#![feature(const_generics)]` still automatically activates
this feature, so using `#![feature(const_generics, lazy_normalization_consts)]` is redundant.

r? @varkor @nikomatsakis
2020-07-05 16:07:30 -07:00
Manish Goregaokar
e450646e97
Rollup merge of #73973 - Nadrieril:fix-71977, r=matthewjasper
Use `Span`s to identify unreachable subpatterns in or-patterns

Fixes #71977
2020-07-05 16:07:28 -07:00
Manish Goregaokar
a1ac4d66d3
Rollup merge of #73937 - JohnTitor:note-exhaustive-sized-int, r=varkor
Explain exhaustive matching on {usize,isize} maximum values

The wording is taken from https://github.com/rust-lang/rfcs/blob/master/text/2591-exhaustive-integer-pattern-matching.md#reference-level-explanation.
Fixes #73919

r? @varkor
2020-07-05 16:07:27 -07:00
Manish Goregaokar
3e78eac206
Rollup merge of #73871 - da-x:private-types-2018-no-extern, r=petrochenkov
Fix try_print_visible_def_path for Rust 2018

The recursive check of `try_print_visible_def_path` did not properly handle the Rust 2018 case of crate-paths without 'extern crate'. Instead, it returned a "not found" via (false, self).

 This fixes #56175.
2020-07-05 16:07:25 -07:00
Manish Goregaokar
fed20132a6
Rollup merge of #73834 - oli-obk:safe_intrinsics, r=ecstatic-morse
Some refactoring around intrinsic type checking

So... This PR went a bit overboard. I wanted to make the `rustc_peek` intrinsic safe (cc @ecstatic-morse ), and remembered a long-standing itch of mine. So I made that huge `&str` match for the intrinsic name a match on `Symbol`s (so basically `u32`s). This is unlikely to have a positive perf effect, even if it likely has better codegen (intrinsics are used rarely, mostly once in their wrapper), so it's mostly a consistency thing since other places actually match on the symbol name of the intrinsics.
2020-07-05 16:07:23 -07:00
bors
2753fab7ce Auto merge of #73879 - ecstatic-morse:discr-switch-uninit, r=oli-obk
Handle inactive enum variants in `MaybeUninitializedPlaces`

Resolves the first part of #69715.

This is the equivalent of #68528 but for `MaybeUninitializedPlaces`. Because we now notify drop elaboration that inactive enum variants might be uninitialized, some drops get marked as ["open" that were previously "static"](e0e5d82e16/src/librustc_mir/transform/elaborate_drops.rs (L191)). Unlike in #69715, this isn't strictly better: An "open" drop expands to more MIR than a simple call to the drop shim. However, because drop elaboration considers each field of an "open" drop separately, it can sometimes eliminate unnecessary drops of moved-from or unit-like enum variants. This is the case for `Option::unwrap`, which is reflected in the `mir-opt` test.

cc @eddyb
r? @oli-obk
2020-07-05 18:01:47 +00:00
Ralf Jung
751b594cc8 const validation: add test for uninit bool 2020-07-05 13:48:06 +02:00
Ralf Jung
c3fc4f0420 catch errors more locally around read_discriminant 2020-07-05 13:40:27 +02:00
Nadrieril
3cb31b6699 Fix #71977 2020-07-04 21:21:07 +01:00
Yuki Okushi
b93ecc1dac
Address code reviews 2020-07-05 03:43:43 +09:00
Oliver Scherer
ee8dd4e3cc Fix const prop ICE
we used to erase the local just before we tried to read it for diagnostics
2020-07-04 19:30:45 +02:00
Yuki Okushi
dcbe85abad
Explain exhaustive matching on {usize,isize} maximum values 2020-07-05 02:10:57 +09:00
Oliver Scherer
66fb778acc Make rustc_peek a safe intrinsic 2020-07-04 18:30:54 +02:00
Bastian Kauschke
7a3081baaf add lazy_normalization_consts feature gate 2020-07-04 10:50:14 +02:00
Manish Goregaokar
60cad20b41
Rollup merge of #73949 - wesleywiser:simplify_try_fixes, r=oli-obk
[mir-opt] Fix mis-optimization and other issues with the SimplifyArmIdentity pass

This does not yet attempt re-enabling the pass, but it does resolve a number of issues with the pass.

r? @oli-obk

I believe this closes #73223.
2020-07-03 17:17:03 -07:00
Manish Goregaokar
6339abd338
Rollup merge of #73861 - GuillaumeGomez:create-e0767, r=Dylan-DPC
Create E0768

r? @Dylan-DPC
2020-07-03 17:16:58 -07:00
Manish Goregaokar
4a8d9ea80f
Rollup merge of #73670 - davidhewitt:format-args-capture, r=varkor
Add `format_args_capture` feature

This is the initial implementation PR for [RFC 2795](https://github.com/rust-lang/rfcs/pull/2795).

Note that, as dicussed in the tracking issue (#67984), the feature gate has been called `format_args_capture`.

Next up I guess I need to add documentation for this feature. I've not written any docs before for rustc / std so I would appreciate suggestions on where I should add docs.
2020-07-03 17:16:52 -07:00
Guillaume Gomez
6970c923d3 Update UI tests 2020-07-04 00:15:32 +02:00
David Hewitt
93d662fd9d Ignore test with panic on wasm targets 2020-07-03 18:17:53 +01:00
Andy Russell
95bf7b7dac
add regression test for #61216
Fixes #61216.
2020-07-03 11:24:05 -04:00
Ralf Jung
fb9fa5ba3e adjust ub-enum test to be endianess-independent 2020-07-03 13:22:54 +02:00
Eric Huss
9b6b400084 Remove some ignore-stage1 annotations. 2020-07-02 22:29:38 -07:00
Wesley Wiser
24bfdc98e9 Fix debuginfo so that it points to the correct local 2020-07-02 21:11:14 -04:00
Wesley Wiser
9248d90d20 [mir-opt] Prevent mis-optimization when SimplifyArmIdentity runs
If temporaries are used beyond just the temporary chain, then we can't
optimize out the reads and writes.
2020-07-02 21:02:57 -04:00
Wesley Wiser
e3f599c15c Add test for simplify-try misoptimization 2020-07-02 20:54:13 -04:00
Manish Goregaokar
d6bfca2ccf
Rollup merge of #73753 - eddyb:extraneous-lifetime, r=Manishearth
Use 'tcx for references to AccessLevels wherever possible.

Most of the changes are just fallout from removing a lifetime parameter from structs, and mostly in clippy.

r? @Manishearth
2020-07-02 15:55:55 -07:00
Manish Goregaokar
2d83cbb8b6
Rollup merge of #73726 - davidtwco:issue-73541-labelled-break-through-closure-async, r=petrochenkov
resolve: disallow labelled breaks/continues through closures/async blocks

Fixes #73541.

This PR modifies name resolution to prohibit labelled breaks/continues through closures or async blocks, fixing an ICE. In addition, it improves the diagnostics surrounding labelled breaks/continues through closures or async blocks by informing the user if the label exists in an parent scope and telling them that won't work.

r? @petrochenkov (resolve)
cc @estebank (diagnostic changes) @tmandry (issue is from `wg-async-foundations`)
2020-07-02 15:55:53 -07:00
Manish Goregaokar
65342fd341
Rollup merge of #73724 - CryZe:wasm-saturating-casts, r=alexcrichton
Use WASM's saturating casts if they are available

WebAssembly supports saturating floating point to integer casts behind a target feature. The feature is already available on many browsers. Beginning with 1.45 Rust will start defining the behavior of floating point to integer casts to be saturating as well. For this Rust constructs additional checks on top of the `fptoui` / `fptosi` instructions it emits. Here we introduce the possibility for the codegen backend to construct saturating casts itself and only fall back to constructing the checks ourselves if that is not possible.

Resolves part of #73591
2020-07-02 15:55:52 -07:00
Eduard-Mihai Burtescu
874f406ffd Use 'tcx for references to AccessLevels wherever possible. 2020-07-03 00:04:48 +03:00
Vadim Petrochenkov
52bdaaa0ed Add some requested tests 2020-07-02 21:05:18 +03:00
Vadim Petrochenkov
64a88db762 Update dtolnay's tests that now work 2020-07-02 20:35:50 +03:00
David Tolnay
63f95a4858 Add test for errors triggered on parts of decomposed index 2020-07-02 20:35:50 +03:00
David Tolnay
3814eec087 Add test for tuple indexed with float in macro input 2020-07-02 20:35:50 +03:00
David Tolnay
6dfa549fb5 Add tests in which the token really is a float 2020-07-02 20:35:50 +03:00
David Tolnay
776deb6b9f Test a range, which is not nested indexing 2020-07-02 20:35:50 +03:00
David Tolnay
0432f63acf Test even deeper nested indexing 2020-07-02 20:35:50 +03:00
David Tolnay
40a21707b4 Add test of tuple nested indexing 2020-07-02 20:35:49 +03:00
Vadim Petrochenkov
8e256b19d5 parser: Break float tokens into parts in tuple field positions 2020-07-02 20:35:49 +03:00
David Wood
bddb266089
typeck: check for infer before type impls trait
This commit checks that the target type of the cast (an error related
to which is being reported) does not have types to be inferred before
checking if it implements the `From` trait.

Signed-off-by: David Wood <david@davidtw.co>
2020-07-02 16:24:09 +01:00
David Wood
1b747a030f
mir: mark mir construction temporaries as internal
This commit marks temporaries from MIR construction as internal such
that they are skipped in `sanitize_witness` (where each MIR local is
checked to have been contained within the generator interior computed
during typeck). This resolves an ICE whereby the construction of checked
addition introduced a `(u64, bool)` temporary which was not in the HIR
and thus not in the generator interior.

Signed-off-by: David Wood <david@davidtw.co>
2020-07-02 16:20:59 +01:00
David Wood
cb541dc12c
resolve: disallow label use through closure/async
This commit modifies resolve to disallow `break`/`continue` to labels
through closures or async blocks. This doesn't make sense and should
have been prohibited anyway.

Signed-off-by: David Wood <david@davidtw.co>
2020-07-02 13:48:32 +01:00
bors
8a6d4342be Auto merge of #73954 - Manishearth:rollup-8qvh170, r=Manishearth
Rollup of 10 pull requests

Successful merges:

 - #73414 (Implement `slice_strip` feature)
 - #73564 (linker: Create GNU_EH_FRAME header by default when producing ELFs)
 - #73622 (Deny unsafe ops in unsafe fns in libcore)
 - #73684 (add spans to injected coverage counters, extract with CoverageData query)
 - #73812 (ast_pretty: Pass some token streams and trees by reference)
 - #73853 (Add newline to rustc MultiSpan docs)
 - #73883 (Compile rustdoc less often.)
 - #73885 (Fix wasm32 being broken due to a NodeJS version bump)
 - #73903 (Changes required for rustc/cargo to build for iOS targets)
 - #73938 (Optimise fast path of checked_ops with `unlikely`)

Failed merges:

r? @ghost
2020-07-02 12:35:08 +00:00
Guillaume Gomez
e955bebcda Remove render-redirect-pages option in rustdoc 2020-07-02 14:14:59 +02:00
Guillaume Gomez
2453946b1d Update rustdoc tests 2020-07-02 13:19:04 +02:00
Christopher Serr
838c497a45 Address review comments and add UI test 2020-07-02 09:35:37 +02:00
Christopher Serr
4c08451fc4 Add codegen tests 2020-07-02 09:32:09 +02:00
Manish Goregaokar
dc762cea33
Rollup merge of #73684 - richkadel:llvm-coverage-map-gen-2, r=wesleywiser
add spans to injected coverage counters, extract with CoverageData query

This is the next iteration on the Rust Coverage implementation, and follows PR #73488

@tmandry @wesleywiser

I came up with an approach for coverage spans, pushing them through the Call terminator as additional args so they can be extracted by the CoverageData query.

I'm using an IndexVec to store them in CoverageData such that there can be only one per index (even if parts of the MIR get duplicated during optimization).

If this approach works for you, I can quickly expand on this to build a separate IndexVec for counter expressions, using a separate call that will be ignored during code generation, but from which I can extract the counter expression values.

Let me know your thoughts. Thanks!

r? @tmandry

Rust compiler MCP rust-lang/compiler-team#278
Relevant issue: #34701 - Implement support for LLVMs code coverage instrumentation
2020-07-02 00:16:30 -07:00
Manish Goregaokar
500634bf10
Rollup merge of #73622 - LeSeulArtichaut:unsafe-libcore, r=nikomatsakis
Deny unsafe ops in unsafe fns in libcore

After `liballoc`, It's time for `libcore` :D

I planned to do this bit by bit to avoid having a big chunk of diffs, so to make reviews easier, and to make the unsafe blocks narrower and take the time to document them properly.

r? @nikomatsakis cc @RalfJung
2020-07-02 00:16:28 -07:00
Yuki Okushi
84282fd6f1
Audit uses of tool_only_span_suggestion 2020-07-02 15:18:33 +09:00
Yuki Okushi
ec31b4e3a8
Audit uses of span_suggestion_short 2020-07-02 15:18:33 +09:00