Skip to content

Add uninit intrinsic. Use in core::vec #4204

Closed
@brson

Description

@brson

vec previously had some code that looked like this:

let vp: *T = ...;
let v = move *vp;

This had the effect of memcpying *vp to v and zeroing *vp. move is being removed so this doesn't work. I've replaced that with:

let mut vp: *T = ...;
let mut v: T = rusti::init(); // Create a zeroed value
v <-> *vp;

This could probably be more efficient by 1) not zeroing the value (in most cases), 2) not doing the swap.

Probably this is what we should do:

let mut vp: *T = ...;
let mut v: T = rusti::uninit(); // Create a non-zeroed value
ptr:memcpy(&mut T, vp, 1);

And if you need the zeroing you can do a memset.

Metadata

Metadata

Assignees

No one assigned

    Labels

    A-codegenArea: Code generationE-easyCall for participation: Easy difficulty. Experience needed to fix: Not much. Good first issue.

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions