| Age | Commit message (Collapse) | Author | Lines |
|
|
|
|
|
|
|
|
|
Ensure StorageDead is created even if variable initialization fails
Rebase and slight cleanup of https://github.com/rust-lang/rust/pull/51109
Fixes https://github.com/rust-lang/rust/issues/49232
r? @eddyb
|
|
|
|
|
|
[NLL] Fix various unused mut errors
Closes #51801
Closes #50897
Closes #51830
Closes #51904
cc #51918 - keeping this one open in case there are any more issues
This PR contains multiple changes. List of changes with examples of what they fix:
* Change mir generation so that the parameter variable doesn't get a name when a `ref` pattern is used as an argument
```rust
fn f(ref y: i32) {} // doesn't trigger lint
```
* Change mir generation so that by-move closure captures don't get first moved into a temporary.
```rust
let mut x = 0; // doesn't trigger lint
move || {
x = 1;
};
```
* Treat generator upvars the same as closure upvars
```rust
let mut x = 0; // This mut is now necessary and is not linted against.
move || {
x = 1;
yield;
};
```
r? @nikomatsakis
|
|
|
|
|
|
|
|
|
|
|
|
NLL.
|
|
|
|
rustc_mir: allow promotion of promotable temps indexed at runtime.
Fixes #49955.
r? @nikomatsakis
|
|
|
|
|
|
We no longer get two disjoint uses. =)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Merge `feature(advanced_slice_patterns)` into `feature(slice_patterns)`
|
|
|
|
|
|
Fixes #47311.
r? @nrc
|
|
|
|
|
|
|
|
|
|
|
|
add transform for uniform array move out
reworked second step for fix #34708
previous try #46686
r? @nikomatsakis
|
|
rustc_mir: insert a dummy access to places being matched on, when building MIR.
Fixes #47412 by adding a `_dummy = Discriminant(place)` before each `match place {...}`.
r? @nikomatsakis
|
|
|
|
|
|
Fixes the hash test to recognize that MirValidated can change when changing
around labels, and add a new test that makes sure we're lowering loop statements
correctly.
|
|
As opposed to using weirdness involving pretending the body block
is the loop block. This does not pass tests
This commit is [ci skip] because I know it doesn't pass tests yet.
Somehow this commit introduces nondeterminism into the handling of
loops.
|
|
Fix instructions on existing mir-opt tests after introducing false edges from
loops. Also, add a test for issue 46036: infinite loops.
|
|
Implicit coercions from references to pointers were lowered to slightly
different Mir than explicit casts (e.g. 'foo as *mut T'). This resulted
in certain uses of self-referential structs compiling correctly when an
explicit cast was used, but not when the implicit coercion was used.
To fix this, this commit adds an outer 'Use' expr when applying a
raw-ptr-borrow adjustment. This makes the lowered Mir for coercions
identical to that of explicit coercions, allowing the original code to
compile regardless of how the raw ptr cast occurs.
Fixes #47722
|
|
|
|
NLL feature complete (adds `feature(nll)`)!
This is the final PR for the nll-master branch; it brings over all remaining content.
The contents of the branch include:
- track causal information and use it to report extended errors
- handle `impl Trait` in NLL code
- improve printing of outlives errors
- add `#![feature(nll)]` and some more sample tests
The commits should for the most part build independently.
r? @pnkfelix (and/or @arielb1)
|
|
The "match exact bits of CFG" approach was fragile and uninformative.
|
|
Fix -Z lower_128bit_ops handling of statics
Avoids ICEs such as the following:
> error: internal compiler error: src\librustc_metadata\cstore_impl.rs:131:
> get_optimized_mir: missing MIR for `DefId(8/0:40 ~
> compiler_builtins[9532]::int[0]::addsub[0]::rust_i128_addo[0])`
r? @nagisa
cc #45676 @est31
|
|
Avoids ICEs such as the following:
error: internal compiler error: src\librustc_metadata\cstore_impl.rs:131:
get_optimized_mir: missing MIR for `DefId(8/0:40 ~
compiler_builtins[9532]::int[0]::addsub[0]::rust_i128_addo[0])`
|
|
|
|
The input/output types found in `UniversalRegions` are not normalized.
The old code used to assign them directly into the MIR, which would
lead to errors when there was a projection in a argument or return
type. This also led to some special cases in the `renumber` code.
We now renumber uniformly but then pass the input/output types into
the MIR type-checker, which equates them with the types found in MIR.
This allows us to normalize at the same time.
|