Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Break out of the correct number of scopes in loops #62388

Merged
merged 1 commit into from Jul 5, 2019

Conversation

Projects
None yet
5 participants
@matthewjasper
Copy link
Contributor

commented Jul 4, 2019

We were incorrectly breaking out of one too many drop scopes when
generating MIR for loops and breakable blocks, resulting in use after
free and associated borrow checker warnings.

This wasn't noticed because the scope that we're breaking out of twice
is only used for temporaries that are created for adjustments applied to
the loop. Since loops generally propagate coercions to the break
expressions, the only case we see this is when the type of the loop is a
smart pointer to a trait object.

Closes #62312

Break out of the correct number of scopes in loops
We were incorrectly breaking out of one too many drop scopes when
generating MIR for loops and breakable blocks, resulting in use after
free and associated borrow checker warnings.

This wasn't noticed because the scope that we're breaking out of twice
is only used for temporaries that are created for adjustments applied to
the loop. Since loops generally propagate coercions to the `break`
expressions, the only case we see this is when the type of the loop is a
smart pointer to a trait object.
@rust-highfive

This comment has been minimized.

Copy link
Collaborator

commented Jul 4, 2019

r? @petrochenkov

(rust_highfive has picked a reviewer for you, use r? to override)

@petrochenkov

This comment has been minimized.

Copy link
Contributor

commented Jul 5, 2019

I know very little about MIR.
r? @rust-lang/compiler

@eddyb

eddyb approved these changes Jul 5, 2019

@eddyb

This comment has been minimized.

Copy link
Member

commented Jul 5, 2019

r? @eddyb
@bors r+

@bors

This comment has been minimized.

Copy link
Contributor

commented Jul 5, 2019

📌 Commit 1b7ffe5 has been approved by eddyb

Centril added a commit to Centril/rust that referenced this pull request Jul 5, 2019

Rollup merge of rust-lang#62388 - rust-lang:fix-loop-break-mir-genera…
…tion, r=eddyb

Break out of the correct number of scopes in loops

We were incorrectly breaking out of one too many drop scopes when
generating MIR for loops and breakable blocks, resulting in use after
free and associated borrow checker warnings.

This wasn't noticed because the scope that we're breaking out of twice
is only used for temporaries that are created for adjustments applied to
the loop. Since loops generally propagate coercions to the `break`
expressions, the only case we see this is when the type of the loop is a
smart pointer to a trait object.

Closes rust-lang#62312

bors added a commit that referenced this pull request Jul 5, 2019

Auto merge of #62407 - Centril:rollup-g0zmff7, r=Centril
Rollup of 10 pull requests

Successful merges:

 - #62123 ( Remove needless lifetimes (std))
 - #62150 (Implement mem::{zeroed,uninitialized} in terms of MaybeUninit.)
 - #62169 (Derive which queries to save using the proc macro)
 - #62238 (Fix code block information icon position)
 - #62292 (Move `async || ...` closures into `#![feature(async_closure)]`)
 - #62323 (Clarify unaligned fields in ptr::{read,write}_unaligned)
 - #62324 (Reduce reliance on `await!(...)` macro)
 - #62371 (Add tracking issue for Box::into_pin)
 - #62383 (Improve error span for async type inference error)
 - #62388 (Break out of the correct number of scopes in loops)

Failed merges:

r? @ghost

@bors bors merged commit 1b7ffe5 into master Jul 5, 2019

3 checks passed

pr Build #20190704.66 succeeded
Details
pr (Linux mingw-check) Linux mingw-check succeeded
Details
pr (Linux x86_64-gnu-llvm-6.0) Linux x86_64-gnu-llvm-6.0 succeeded
Details

@matthewjasper matthewjasper deleted the fix-loop-break-mir-generation branch Jul 5, 2019

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
You can’t perform that action at this time.