Commit graph

357 commits

Author SHA1 Message Date
Mazdak Farrokhzad
dbe880e8ec
Rollup merge of #66850 - eddyb:span-free-formats, r=oli-obk
rustc: hide HirId's fmt::Debug output from -Z span_free_formats.

This replaces the only occurrences of `HirId {...}` from tests with paths, i.e.:
```rust
[closure@HirId { owner: DefIndex(4), local_id: 15 } q:&i32, t:&T]
```
becomes, after this PR:
```rust
[closure@foo<T>::{{closure}}#0 q:&i32, t:&T]
```

r? @oli-obk cc @michaelwoerister
2019-12-02 04:09:01 +01:00
Tomasz Miąsko
45c4e11e43 SimplifyArmIdentity only for locals with the same type
Co-Authored-By: Mazdak Farrokhzad <twingoow@gmail.com>
2019-11-29 20:13:54 +01:00
Eduard-Mihai Burtescu
71710608f0 rustc: hide HirId's fmt::Debug output from -Z span_free_formats. 2019-11-28 22:32:43 +02:00
Eduard-Mihai Burtescu
563ed27c01 rustc: move debug info from LocalDecl and UpvarDecl into a dedicated VarDebugInfo. 2019-11-27 19:22:03 +02:00
bors
876a72a251 Auto merge of #66677 - wesleywiser:fix_const_prop_alloc_id_ice, r=oli-obk
[const prop] Fix "alloc id without corresponding allocation" ICE

r? @oli-obk
2019-11-27 08:00:58 +00:00
Wesley Wiser
2b6815a69e [const prop] Fix "alloc id without corresponding allocation" ICE
Fixes #66345
2019-11-23 15:11:59 -05:00
Mazdak Farrokhzad
3031720d8f
Rollup merge of #66587 - matthewjasper:handle-static-as-const, r=oli-obk
Handle statics in MIR as const pointers

This is the first PR towards the goal of removing `PlaceBase::Static`. In this PR:

* Statics are lowered to dereferencing a const pointer.
* The temporaries holding such pointers are tracked in MIR, for the most part this is only used for diagnostics. There are two exceptions:
    * The borrow checker has some checks for thread-locals that directly use this data.
    * Const checking will suppress "cannot dereference raw pointer" diagnostics for pointers to `static mut`/`extern static`. This is to maintain the current behaviour (12 tests fail otherwise).

The following are left to future PRs (I think that @spastorino will be working on the first 3):

* Applying the same treatments to promoted statics.
* Removing `PlaceBase::Static`.
* Replacing `PlaceBase` with `Local`.
* Moving the ever growing collection of metadata that we have for diagnostics in MIR passes somewhere more appropriate.

r? @oli-obk
2019-11-22 19:57:49 +01:00
Matthew Jasper
025630d189 Bless remaining test output 2019-11-21 20:55:17 +00:00
Mazdak Farrokhzad
2f00e86cb5 Introduce MIR optimizations for simplifying x? on Results.
This optimization depends on inlining for the identity
conversions introduced by the lowering of the `?`.
To take advantage of `SimplifyArmIdentity`, `-Z mir-opt-level=2`
is required because that triggers the inlining MIR optimization.
2019-11-21 20:05:16 +01:00
Mazdak Farrokhzad
8f6197f39f Remove #![feature(never_type)] from tests.
Also remove `never_type` the feature-gate test.
2019-11-21 14:55:32 +01:00
bors
5e380b797b Auto merge of #66233 - cjgillot:constkind, r=oli-obk
Split ConstValue into two enums

Hello,

Issue #59210 appeared abandoned, so I gave it a go.
Some further cleanup and refactoring may be mandated.

I did not test beyond `x.py check`, since my home computer dies compiling librustc.

Fixes #59210
2019-11-14 04:54:51 +00:00
Camille GILLOT
552fa64798 Bless mir-dump test. 2019-11-12 22:02:55 +01:00
Matthew Jasper
7320818292 Fix soundness issue with index bounds checks
An expression like `x[1][{ x = y; 2}]` would perform the bounds check
for the inner index operation before evaluating the outer index. This
would allow out of bounds memory accesses.
2019-11-11 22:06:54 +00:00
bors
57a5f92bef Auto merge of #66259 - JohnTitor:rollup-x9nk1e2, r=JohnTitor
Rollup of 7 pull requests

Successful merges:

 - #65719 (Refactor sync::Once)
 - #65831 (Don't cast directly from &[T; N] to *const T)
 - #66048 (Correct error in documentation for Ipv4Addr method)
 - #66058 (Correct deprecated `is_global` IPv6 documentation)
 - #66216 ([mir-opt] Handle return place in ConstProp and improve SimplifyLocals pass)
 - #66217 (invalid_value lint: use diagnostic items)
 - #66235 (rustc_metadata: don't let LLVM confuse rmeta blobs for COFF object files.)

Failed merges:

r? @ghost
2019-11-10 02:15:28 +00:00
Yuki Okushi
f166609433
Rollup merge of #66216 - wesleywiser:const_prop_codegen_improvements, r=oli-obk
[mir-opt] Handle return place in ConstProp and improve SimplifyLocals pass

Temporarily rebased on top of #66074. The top 2 commits are new.

r? @oli-obk
2019-11-10 09:27:17 +09:00
bors
c296b2d830 Auto merge of #65694 - wesleywiser:uninhabited_enum_variants_pass, r=oli-obk
[mir-opt] Implement pass to remove branches on uninhabited variants

Based on discussion [here](https://github.com/rust-lang/rust/pull/64890#discussion_r333612125), this is a pass to eliminate dead code that is caused by branching on an enum with uninhabited variants.

r? @oli-obk
2019-11-09 23:01:06 +00:00
Wesley Wiser
4505ff4bad [mir-opt] Handle aggregates in SimplifyLocals pass 2019-11-08 22:28:53 -05:00
Wesley Wiser
8316701d37 [mir-opt] Handle const-prop for the return place 2019-11-08 22:27:27 -05:00
Dylan MacKenzie
b316384e14 Use new PromoteTemps for promotion 2019-11-08 15:00:20 -08:00
Wesley Wiser
cbe2f6095a Implement pass to remove branches on uninhabited variants 2019-11-06 21:10:29 -05:00
Eduard-Mihai Burtescu
25953321c0 rustc: remove "GlobalMetaData" dead code from hir::map::definitions. 2019-11-05 21:00:38 +02:00
bors
472e6787f0 Auto merge of #65459 - ecstatic-morse:graphviz-subgraph, r=estebank
Fix `-Zunpretty=mir-cfg` to render multiple items

`-Zunpretty=mir-cfg` outputs DOT to stdout for all items being compiled. However, it puts all of these items in separate `digraph`s, which means the result of redirecting that output to a file is not valid. Most dot renderers (I have tried `dot` and `xdot`) cannot render the output.

This PR checks to see if `write_mir_graphviz` will  process multiple items, and writes them each as a `subgraph` in a single, top-level `digraph`. As a result, DOT can be viewed without manually editing the output file. The output is unchanged when printing a single item (e.g.`-Zunpretty=mir-cfg=item_name`).

Here's the output of `xdot` for a rust file containing three items:
![three-items](https://user-images.githubusercontent.com/29463364/66889712-4bf62200-ef98-11e9-83b5-60faa2a300dd.png)

The borders are a result of the nonstandard–but well-supported–[`cluster` prefix](https://graphviz.gitlab.io/_pages/doc/info/lang.html) (search for "Subgraphs and Clusters"). They will not appear if your renderer does not support this extension, but the graph will still render properly.
2019-11-01 03:15:31 +00:00
Thomas Lively
62c3443e96 Re-enable Emscripten's exception handling support
Passes LLVM codegen and Emscripten link-time flags for exception
handling if and only if the panic strategy is `unwind`. Sets the
default panic strategy for Emscripten targets to `unwind`. Re-enables
tests that depend on unwinding support for Emscripten, including
`should_panic` tests.
2019-10-25 15:16:36 -07:00
Wesley Wiser
2ec73395b9 Improve SimplifyLocals pass so it can remove unused consts
The `ConstProp` can cause many locals to be initialized to a constant
value and then never read from. `ConstProp` can also evaluate ZSTs into
constant values. Previously, many of these would be removed by other
parts of the MIR optimization pipeline. However, evaluating ZSTs
(especially `()`) into constant values defeated those parts of the
optimizer and so in a2e3ed5c05, I added a
hack to `ConstProp` that skips evaluating ZSTs to avoid that regression.

This commit changes `SimplifyLocals` so that it doesn't consider writes
of const values to a local to be a use of that local. In doing so,
`SimplifyLocals` is able to remove otherwise unused locals left behind
by other optimization passes (`ConstProp` in particular).
2019-10-20 23:49:42 -04:00
Wesley Wiser
2d22063e4c [const-prop] Handle MIR Rvalue::Box 2019-10-18 19:16:49 -04:00
Wesley Wiser
4d89031e80 [const-prop] Handle MIR Rvalue::Discriminant 2019-10-18 06:29:57 -04:00
Wesley Wiser
a2e3ed5c05 [const-prop] Handle MIR Rvalue::Aggregates 2019-10-18 06:29:57 -04:00
Wesley Wiser
c8f7e18ceb [const-prop] Handle MIR Rvalue::Repeat 2019-10-18 06:29:56 -04:00
Thomas Lively
2bf59bea48 Upgrade Emscripten targets to use upstream LLVM backend
- Compatible with Emscripten 1.38.46-upstream or later upstream.
 - Refactors the Emscripten target spec to share code with other wasm
   targets.
 - Replaces the old incorrect wasm32 C call ABI with the correct one,
   preserving the old one as wasm32_bindgen_compat for wasm-bindgen
   compatibility.
 - Updates the varargs ABI used by Emscripten and deletes the old one.
 - Removes the obsolete wasm32-experimental-emscripten target.
 - Uses EMCC_CFLAGS on CI to avoid the timeout problems with #63649.
2019-10-16 17:06:48 -07:00
Dylan MacKenzie
cd3e9c4815 Bless graphviz test with unique identifiers 2019-10-16 09:19:12 -07:00
Tyler Mandry
ea0d155f2d
Rollup merge of #64986 - skinny121:fn-ptr-const-generics, r=varkor
Function pointers as const generic arguments

Makes function pointers as const generic arguments usable.

Fixes #62395

r? @varkor
2019-10-11 15:09:42 -07:00
Matthew Jasper
a0342c8965 Revert "Make into schedule drop for the destination"
This reverts commit 37026837a3.
2019-10-09 21:13:18 +01:00
ben
50ea5f4535 Fix reify_fn_ptr test as we now pretty print const function pointers. 2019-10-09 05:10:00 +13:00
Matthew Jasper
37026837a3 Make into schedule drop for the destination 2019-10-04 21:41:37 +01:00
Wesley Wiser
a99f255015 Allow reading non-mutable statics in const prop 2019-09-28 07:51:38 -04:00
Wesley Wiser
ecc4cc2fc4 [const-prop] Replace Cast handling with use of InterpCx 2019-09-27 20:11:12 -04:00
Wesley Wiser
bc17936c8a [const-prop] Replace eval_place() with use of InterpCx 2019-09-27 20:11:12 -04:00
Niko Matsakis
77fd0a7649 add a mir-opt test that we don't add the spurious drop 2019-09-19 16:12:48 -04:00
Niko Matsakis
1962d75c10 fix mir-opt tests 2019-09-19 14:30:05 -04:00
Mazdak Farrokhzad
642993e6dc Update tests wrt. bind_by_by_move_pattern_guards stabilization. 2019-09-08 01:39:24 +02:00
Ralf Jung
2122fe4611 ignore tests on wasm32-bare 2019-08-15 12:54:56 +02:00
Ralf Jung
9776dbdac3 test Retag in drop shim 2019-08-15 12:51:58 +02:00
Ralf Jung
0f97583e68 const_prop no longer does ptr-to-int casts 2019-08-02 23:04:11 +02:00
Mazdak Farrokhzad
75da43dc87 Use new 'p @ ..' syntax in tests. 2019-07-28 06:53:39 +02:00
bjorn3
93de733f02 Remove tests for -Zlower-128bit-ops 2019-07-20 14:38:50 +02:00
bors
03a68d6973 Auto merge of #62331 - wesleywiser:fix_early_return_leak, r=matthewjasper
Fix leak when early returning out of `box` syntax

Fixes #62289

r? @matthewjasper
2019-07-14 05:25:08 +00:00
Wesley Wiser
aabaf12155 Fix leak when early returning out of box syntax
Fixes #62289
2019-07-11 20:12:19 -04:00
Matthew Jasper
163c059354 Only omit StorageLive/Dead for variable that are never initialized
With `feature(never_type)`, it's not guaranteed that any variable with
type `!` isn't ever assigned to.
2019-07-07 15:04:43 +01:00
Mazdak Farrokhzad
075e381b91 Bless mir-opt/while-storage.rs. 2019-07-06 06:43:58 +02:00
Matthew Jasper
b86e6755b9 Add StorageDead statements for while conditions 2019-06-25 22:41:22 +01:00