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

make for PAT in ITER_EXPR { ... } a terminating-scope for ITER_EXPR. #21984

Merged
merged 1 commit into from
Feb 7, 2015

Commits on Feb 5, 2015

  1. make for PAT in ITER_EXPR { ... } a terminating-scope for ITER_EXPR.

    In effect, temporary anonymous values created during the evaluation of
    ITER_EXPR no longer not live for the entirety of the block surrounding
    the for-loop; instead they only live for the extent of the for-loop
    itself, and no longer.
    
    ----
    
    There is one case I know of that this breaks, demonstrated to me by
    niko (but it is also a corner-case that is useless in practice).  Here
    is that case:
    
    ```
    fn main() {
        let mut foo: Vec<&i8> = Vec::new();
        for i in &[1, 2, 3] { foo.push(i) }
    }
    ```
    
    Note that if you add any code following the for-loop above, or even a
    semicolon to the end of it, then the code will stop compiling (i.e.,
    it gathers a vector of references but the gathered vector cannot
    actually be used.)
    
    (The above code, despite being useless, did occur in one run-pass test
    by accident; that test is updated here to accommodate the new
    striction.)
    
    ----
    
    So, technically this is a:
    
    [breaking-change]
    pnkfelix committed Feb 5, 2015
    Configuration menu
    Copy the full SHA
    b445bf2 View commit details
    Browse the repository at this point in the history