Skip to content

"Moving" out of a static could be a memcpy #13233

@alexcrichton

Description

@alexcrichton
Member

This was discussed at the recent work week, but it appears that our notes to not reflect a decision one way or another. I would expect this code to compile:

use std::sync::atomics;

fn main() {
    let a = atomics::INIT_ATOMIC_UINT;
}

Specifically, you can "move" out of any non-mut static, it just turns in to a memcpy. The contents of the static have already been validated to not own anything and have no destructors, so this should be safe.

Activity

flaper87

flaper87 commented on Mar 31, 2014

@flaper87
Contributor

Moves out of static items were disallowed as part of 8784d2f

Relaxing this to just mutable static items should be pretty straightforward. I'm tagging the issue as e-easy, I can mentor.

malu

malu commented on Mar 31, 2014

@malu

I'd be interested to try this. Is it correct that I would either have to add a new option to categorization in middle/mem_categorization.rs or add a boolean field to the cat_static_item option to represent mutability?

Edit: Ok, I guess that is unnecessary given that I can get the mutability through the cmt_ struct. Am I understanding all this correctly?

I should probably add I'm talking about changing the check_is_legal_to_move_from function in middle/borrowck/gather_loans/gather_moves.rs.

flaper87

flaper87 commented on Apr 1, 2014

@flaper87
Contributor

@malu correct, you don't need to add anything to cat_static_item because cmt already has the information you need.

The change consists in adding an arm for cat_static_item and returning true or false based on the mutability.

malu

malu commented on Apr 1, 2014

@malu

Please see https://github.com/malu/rust/tree/issue-13233 and tell me if I did something wrong or if something is missing.

flaper87

flaper87 commented on Apr 1, 2014

@flaper87
Contributor

@malu it's easier (and better) to comment on pull-requests. Would you mind submitting a PR ? I can provide feedback there. Thanks a lot for working on this.

nikomatsakis

nikomatsakis commented on Apr 1, 2014

@nikomatsakis
Contributor

cc me

added a commit that references this issue on Apr 1, 2014
30dafcb
huonw

huonw commented on Nov 10, 2014

@huonw
Member

This role is now filled by const. Closing.

added 3 commits that reference this issue on Aug 24, 2024
e5a1ef0
926f639
1f4f9d8
added a commit that references this issue on Sep 3, 2024
ceea8b2
added a commit that references this issue on May 21, 2025
94cfebb
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    A-type-systemArea: Type systemE-easyCall for participation: Easy difficulty. Experience needed to fix: Not much. Good first issue.E-mentorCall for participation: This issue has a mentor. Use #t-compiler/help on Zulip for discussion.

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

      Development

      Participants

      @malu@flaper87@alexcrichton@nikomatsakis@huonw

      Issue actions

        "Moving" out of a static could be a memcpy · Issue #13233 · rust-lang/rust