diff options
| author | bors <bors@rust-lang.org> | 2017-09-11 20:02:19 +0000 |
|---|---|---|
| committer | bors <bors@rust-lang.org> | 2017-09-11 20:02:19 +0000 |
| commit | eba374fb21b63751ac10a09dbf269fd5067d4eb8 (patch) | |
| tree | 4509b24f899cdc2cc05d2a3963df5ec22b0e2250 /src/libstd/sys | |
| parent | efa3ec67e28ab8a4c3377a039095cd464713cdfd (diff) | |
| parent | fb540e3de45571ac85c610475031449993c19277 (diff) | |
| download | rust-eba374fb21b63751ac10a09dbf269fd5067d4eb8.tar.gz rust-eba374fb21b63751ac10a09dbf269fd5067d4eb8.zip | |
Auto merge of #44442 - Aaron1011:promote-static-ref, r=eddyb
Fix regression in promotion of rvalues referencing a static This commit makes librustc_passes::consts::CheckCrateVisitor properly mark expressions as promotable if they reference a static, as it's perfectly fine for one static to reference another. It fixes a regression that prevented a temporary rvalue from referencing a static if it was itself declared within a static. Prior to commit https://github.com/rust-lang/rust/commit/b8c05fe90bc, `region::ScopeTree` would only register a 'terminating scope' for function bodies. Thus, while rvalues in a static that referenced a static would be marked unpromotable, the lack of enclosing scope would cause mem_categorization::MemCategorizationContext::cat_rvalue_node to compute a 'temporary scope' of `ReStatic`. Since this had the same effect as explicitly selecting a scope of `ReStatic` due to the rvalue being marked by CheckCrateVisitor as promotable, no issue occurred. However, commit https://github.com/rust-lang/rust/commit/b8c05fe90bc made ScopeTree unconditionally register a 'terminating scope' Since mem_categorization would now compute a non-static 'temporary scope', the aforementioned rvalues would be erroneously marked as living for too short a time. By fixing the behavior of CheckCrateVisitor, this commit avoids changing mem_categorization's behavior, while ensuring that temporary values in statics are still allowed to reference other statics. Fixes issue #44373
Diffstat (limited to 'src/libstd/sys')
0 files changed, 0 insertions, 0 deletions
