diff options
| author | Felix S. Klock II <pnkfelix@pnkfx.org> | 2015-02-04 13:24:44 +0100 |
|---|---|---|
| committer | Felix S. Klock II <pnkfelix@pnkfx.org> | 2015-02-06 00:07:37 +0100 |
| commit | b445bf2bd1139236fd815bf93610ddaf17726111 (patch) | |
| tree | 099d8982a9a68f8446ef32a736fc56e588bb0174 /src/libstd/sys/unix/stack_overflow.rs | |
| parent | 189930fcae287565dcef856ae8d60a83190a4b92 (diff) | |
| download | rust-b445bf2bd1139236fd815bf93610ddaf17726111.tar.gz rust-b445bf2bd1139236fd815bf93610ddaf17726111.zip | |
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]
Diffstat (limited to 'src/libstd/sys/unix/stack_overflow.rs')
0 files changed, 0 insertions, 0 deletions
