Commit Graph

1956 Commits

Author SHA1 Message Date
Wesley Wiser
de3cf6e8a4 Run SimplifyLocals iteratively until we get to a fixedpoint 2020-04-15 14:58:53 -04:00
Wesley Wiser
7c0802b341 Remove other Rvalues 2020-04-15 14:53:41 -04:00
Mazdak Farrokhzad
8da59521e1
Rollup merge of #71100 - RalfJung:miri-frame-hook, r=oli-obk
Miri: expand frame hooks

This is needed to make https://github.com/rust-lang/miri/pull/1330 work.

r? @oli-obk @eddyb
2020-04-15 09:10:03 +02:00
Mazdak Farrokhzad
629e51b761
Rollup merge of #70891 - lcnr:replace-rvalue_aggregate, r=eddyb
unit rvalue, use constant `()` instead of tuple

fixes #70886

r? @eddyb
2020-04-15 09:10:00 +02:00
bors
351eefe93a Auto merge of #71106 - jonas-schievink:remove-call-guard-pass, r=ecstatic-morse,RalfJung
Don't always run `add_call_guards` pass

It is only needed when `add_retag` runs.

(the pass is run again to split critical edges before codegen, that one is required)
2020-04-15 03:40:37 +00:00
Bastian Kauschke
db83fdc46c unit rvalue: use constant () instead of tuple 2020-04-13 22:39:10 +02:00
Jonas Schievink
8c50006829 Don't always run add_call_guards pass 2020-04-13 20:22:45 +02:00
Ralf Jung
28e6b1a602 Miri: let machine hook dynamically decide about alignment checks 2020-04-13 17:59:12 +02:00
Ralf Jung
1a3bda6487 Miri: let push_frame hook also access and mutate the rest of the frame data 2020-04-13 16:06:51 +02:00
Dylan DPC
c076da080c
Rollup merge of #71013 - jonas-schievink:visit-projection, r=eddyb
Pass the `PlaceElem::Index` local to `visit_local`

Fixes https://github.com/rust-lang/rust/issues/71008

cc @rust-lang/wg-mir-opt

r? @spastorino
2020-04-12 23:47:38 +02:00
bors
76882666eb Auto merge of #71014 - Centril:rollup-3lc8cnt, r=Centril
Rollup of 5 pull requests

Successful merges:

 - #69573 (tests encoding current behavior for various cases of "binding" to _.)
 - #70881 (bootstrap: work around "unused attribute" errors in incremental stdlib rebuilds.)
 - #70957 (Normalize MIR locals' types for generator layout computation.)
 - #70962 (added machine hooks to track deallocations)
 - #70982 (Normalize function signature in function casting check procedure)

Failed merges:

r? @ghost
2020-04-11 12:22:00 +00:00
Mazdak Farrokhzad
eec86ba3bd
Rollup merge of #70957 - oli-obk:lazy_repeat_length_eval_ice, r=matthewjasper
Normalize MIR locals' types for generator layout computation.

fixes #70905
2020-04-11 01:52:26 +02:00
Jonas Schievink
72ae73ae61 Pass the PlaceElem::Index local to visit_local 2020-04-11 01:39:50 +02:00
bors
f363450358 Auto merge of #70986 - marmeladema:issue70853/librustc_middle-local-def-id, r=eddyb
rustc_middle: return `LocalDefId` where possible in hir::map module

This changes the return type of the following functions to return a `LocalDefId` instead of a `DefId`:
* opt_local_def_id_from_node_id
* opt_local_def_id
* body_owner_def_id
* local_def_id_from_node_id
* get_parent_id

This is another step in the right direction for #70853

This pull request will be followed by another (substantial one) which changes the return type of `local_def_id` function but this change being more invasive, we might want to wait for #70956 or #70961 (or some other form it) to land first.
2020-04-10 23:13:13 +00:00
Mazdak Farrokhzad
1fe86f47d8
Rollup merge of #69745 - estebank:predicate-obligations-3, r=nikomatsakis,eddyb
Use `PredicateObligation`s instead of `Predicate`s

Keep more information about trait binding failures. Use more specific spans by pointing at bindings that introduce obligations.

Subset of #69709.

r? @eddyb
2020-04-10 18:15:16 +02:00
marmeladema
f62c6e1c76 librustc_middle: return LocalDefId instead of DefId in body_owner_def_id 2020-04-10 12:13:54 +01:00
Dylan MacKenzie
715486067e Explain why we remove self from storage live locals 2020-04-09 13:01:59 -07:00
Dylan MacKenzie
02c65e1e11 Use new utility in transform/generator.rs 2020-04-09 12:48:31 -07:00
Oliver Scherer
8a03147f22 Normalize MIR locals' types for generator layout computation. 2020-04-09 16:48:36 +02:00
Esteban Küber
bd7ea5441e Use PredicateObligations instead of Predicates
Keep more information about trait binding failures.
2020-04-08 14:40:45 -07:00
Eduard-Mihai Burtescu
3410aeddbe ty: switch Ty::walk from Ty to GenericArg. 2020-04-06 21:55:50 +03:00
bors
bd18bc9a4c Auto merge of #70771 - RalfJung:ctfe-loop, r=oli-obk
Miri terminator handling: only do progress sanity check for 'Call' terminator

This will still catch mistakes in bad intrinsic/foreign-item shims, which is the main source of errors here.

Fixes https://github.com/rust-lang/rust/issues/70723
r? @oli-obk
2020-04-06 11:32:33 +00:00
Ralf Jung
43cdfbb3fe set span more accurately during const_prop 2020-04-05 19:28:28 +02:00
Linus Färnstrand
fcf45999f7 Stop importing int/float modules in librustc_* 2020-04-05 11:22:01 +02:00
Mazdak Farrokhzad
4cba69e585
Rollup merge of #70595 - wesleywiser:remove_unused_discriminant_reads, r=oli-obk
Remove unused discriminant reads from MIR bodies

Allow the `SimplifyLocals` pass to remove reads of discriminants if the
read is never used.

Fixes #70531

r? @oli-obk
2020-04-03 00:32:01 +02:00
Wesley Wiser
75e2e8c71b Remove unused discriminant reads from MIR bodies
Allow the `SimplifyLocals` pass to remove reads of discriminants if the
read is never used.
2020-04-02 08:14:34 -04:00
Mazdak Farrokhzad
6daff1400a direct imports for langitem stuff 2020-04-02 13:40:43 +02:00
Mazdak Farrokhzad
124144704f nix rustc_target::abi::* reexport in ty::layout 2020-04-02 13:40:43 +02:00
Dylan DPC
b919df21a9
Rollup merge of #70590 - RalfJung:miri-backtrace, r=oli-obk
Miri: make backtrace function names and spans match up

Currently, Miri backtraces are a bit confusing:
```
error: Undefined Behavior: entering unreachable code
  --> tests/compile-fail/never_transmute_void.rs:10:11
   |
10 |     match v {} //~ ERROR  entering unreachable code
   |           ^ entering unreachable code
   |
   = help: this indicates a bug in the program: it performed an invalid operation, and caused Undefined Behavior
   = help: see https://doc.rust-lang.org/nightly/reference/behavior-considered-undefined.html for further information
note: inside call to `f` at tests/compile-fail/never_transmute_void.rs:17:5
  --> tests/compile-fail/never_transmute_void.rs:17:5
   |
17 |     f(v); //~ inside call to `f`
   |     ^^^^
   = note: inside call to `main` at /home/r/.rustup/toolchains/miri/lib/rustlib/src/rust/src/libstd/rt.rs:67:34
   = note: inside call to closure at /home/r/.rustup/toolchains/miri/lib/rustlib/src/rust/src/libstd/rt.rs:52:73
   = note: inside call to closure at /home/r/.rustup/toolchains/miri/lib/rustlib/src/rust/src/libstd/sys_common/backtrace.rs:130:5
```
When reading this like a normal backtrace, one would expect that e.g. the backrace involves the "main" function at "libstd/rt.rs:67:34". But that is not actually where we are in the main function, that is *where the main function is called*.

This is not how backtraces are usually rendered (including e.g. with `RUST_BACKTRACE=1`). Usually we print next to each function name where inside that function the frame is currently executing, not where the *parent* frame is executing. With this PR and the Miri side at https://github.com/rust-lang/miri/pull/1283, the backtrace now looks as follows:
```
error: Undefined Behavior: entering unreachable code
  --> tests/compile-fail/never_transmute_void.rs:10:11
   |
10 |     match v {} //~ ERROR entering unreachable code
   |           ^ entering unreachable code
   |
   = help: this indicates a bug in the program: it performed an invalid operation, and caused Undefined Behavior
   = help: see https://doc.rust-lang.org/nightly/reference/behavior-considered-undefined.html for further information
   = note: inside `f` at tests/compile-fail/never_transmute_void.rs:10:11
note: inside `main` at tests/compile-fail/never_transmute_void.rs:17:5
  --> tests/compile-fail/never_transmute_void.rs:17:5
   |
17 |     f(v); //~ inside `main`
   |     ^^^^
   = note: inside closure at /home/r/src/rust/rustc/src/libstd/rt.rs:67:34
   = note: inside closure at /home/r/src/rust/rustc/src/libstd/rt.rs:52:73
   = note: inside `std::sys_common::backtrace::__rust_begin_short_backtrace::<[closure@DefId(1:6034 ~ std[87db]::rt[0]::lang_start_internal[0]::{{closure}}[0]::{{closure}}[0]) 0:&dyn std::ops::Fn() -> i32 + std::marker::Sync + std::panic::RefUnwindSafe], i32>` at /home/r/src/rust/rustc/src/libstd/sys_common/backtrace.rs:130:5
```
Now function name and printed line numbers match up in the notes.

This code is partially shared with const-eval, so the change also affects const-eval: instead of printing what is being called at some span, we print which function/constant this span is inside.

With this, we can also remove the `span` field from Miri's stack frames (which used to track the *caller span* of that frame, quite confusing), and then get of a whole lot of `span` arguments that ultimately just served to fill that field (and as a fallback for `caller_location`, which however was never actually used).

r? @oli-obk
2020-04-01 22:25:16 +02:00
Mazdak Farrokhzad
9223bb5f32
Rollup merge of #70627 - spastorino:use-place-directly-its-copy, r=oli-obk
Use place directly its copy

r? @oli-obk
2020-04-01 14:32:19 +02:00
Mazdak Farrokhzad
84a4633880
Rollup merge of #70511 - ecstatic-morse:mir-dataflow-graphviz, r=davidtwco
Add `-Z dump-mir-dataflow` flag for dumping dataflow results visualization

Previously, to visualize the results of a MIR dataflow pass, one had to add a `#[rustc_mir(borrowck_graphviz_postflow)]` attribute to functions of interest. However, there is no way to specify this attribute on closures and generators, so it was impossible to view results for these MIR bodies.

This PR adds a flag, `-Z dump-mir-dataflow`, which will output the dataflow results for any functions specified in `-Z dump-mir` to the output directory specified by `-Z dump-mir-dir`. This behavior is modeled on the `-Z dump-mir-graphviz` flag.
2020-04-01 14:32:12 +02:00
Santiago Pastorino
017620fdfc
Use Place directly in peek_at, it's Copy 2020-03-31 17:37:51 -03:00
Santiago Pastorino
5987b0f8be
Use Place directly in place_as_reborrow, it's Copy 2020-03-31 17:37:48 -03:00
Santiago Pastorino
6a95bf884f
Use Place directly on Operand::place and friends, it's Copy 2020-03-31 14:45:07 -03:00
Santiago Pastorino
890b39381f
Use Place directly, it's Copy even more use cases 2020-03-31 14:45:05 -03:00
Santiago Pastorino
25528c1e28
Use Place directly, it's Copy more use cases 2020-03-31 14:44:01 -03:00
Santiago Pastorino
760bca4f5b
Use Place directly on check_mut_borrowing_layout_constrained_field, it's Copy 2020-03-31 14:44:00 -03:00
Ralf Jung
afe1ffb190 remove unnecessary relocation check in const_prop 2020-03-31 15:27:45 +02:00
Ralf Jung
a1a583b3a2 stop unnecessarily passing around span argument for Miri function calls 2020-03-30 22:54:15 +02:00
Ralf Jung
abe143abf1 remove caller span from Miri stack frame 2020-03-30 22:17:59 +02:00
Matthias Krüger
9bba047c2e Use if let instead of match when only matching a single variant (clippy::single_match)
Makes code more compact and reduces nestig.
2020-03-30 10:52:29 +02:00
Mazdak Farrokhzad
1ccb0b4a02 rustc -> rustc_middle part 3 (rustfmt) 2020-03-30 07:19:55 +02:00
Mazdak Farrokhzad
0cb9e36090 rustc -> rustc_middle part 2 2020-03-30 07:16:56 +02:00
bors
0afdf43dc1 Auto merge of #70449 - ecstatic-morse:visit-body, r=oli-obk
Make `Visitor::visit_body` take a plain `&Body`

`ReadOnlyBodyAndCache` has replaced `&Body` in many parts of the code base that don't care about basic block predecessors. This includes the MIR `Visitor` trait, which I suspect resulted in many unnecessary changes in #64736. This reverts part of that PR to reduce the number of places where we need to pass a `ReadOnlyBodyAndCache`.

In the long term, we should either give `ReadOnlyBodyAndCache` more ergonomic name and replace all uses of `&mir::Body` with it at the cost of carrying an extra pointer everywhere, or use it only in places that actually need access to the predecessor cache. Perhaps there is an even nicer alternative.

r? @Nashenas88
2020-03-30 02:04:00 +00:00
Dylan MacKenzie
538cdef64b Use & to do deref coercion for ReadOnlyBodyAndCache 2020-03-29 13:30:26 -07:00
Dylan DPC
d009ce441f
Rollup merge of #69702 - anyska:tylayout-rename, r=oli-obk
Rename TyLayout to TyAndLayout.
2020-03-29 21:23:50 +02:00
Dylan MacKenzie
b641e9e358 Make Visitor::visit_body take a simple Body 2020-03-29 11:56:36 -07:00
Dylan MacKenzie
edbd7c8602 dump_enabled takes a DefId instead of MirSource 2020-03-28 14:07:07 -07:00
Ana-Maria Mihalache
50d2c3abd5 Rename TyLayout to TyAndLayout. 2020-03-27 17:14:53 +00:00
Bastian Kauschke
37603f499a clarify hir_id <-> node_id method names 2020-03-27 16:43:20 +01:00